Long description

Back

typedef int semaphore semicolon forward slash asterisk use your imagination asterisk forward slash

semaphore mutex equals 1 semicolon forward slash asterisk controls access to rc asterisk forward slash

semaphore db equals 1 semicolon forward slash asterisk controls access to the database asterisk forward slash

int rc equals 0 semicolon forward slash asterisk hash of processes reading or wanting to asterisk forward slash

void reader open parenthesis void close parenthesis

while open parenthesis TRUE close parenthesis open curly bracket forward slash asterisk repeat forever asterisk forward slash

down open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk get exclusive access to rc asterisk forward slash

rc equals rc plus 1 semicolon forward slash asterisk one reader more now asterisk forward slash

if open parenthesis rc equals equals 1 close parenthesis down open parenthesis ampersand db close parenthesis semicolon forward slash asterisk if this is the first reader ... asterisk forward slash

up open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk release exclusive access to rc asterisk forward slash

read underscore data underscore base open parenthesis close parenthesis semicolon forward slash asterisk access the data asterisk forward slash

down open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk get exclusive access to rc asterisk forward slash

rc equals rc minus 1 semicolon forward slash asterisk one reader fewer now asterisk forward slash

if open parenthesis rc equals equals 0 close parenthesis up open parenthesis ampersand db close parenthesis semicolon forward slash asterisk if this is the last reader ... asterisk forward slash

up open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk release exclusive access to rc asterisk forward slash

use underscore data underscore read open close parenthesis semicolon forward slash asterisk noncritical region asterisk forward slash

void writer open parenthesis void close parenthesis

open curly bracket

while open parenthesis TRUE close parenthesis open curly bracket forward slash asterisk repeat forever asterisk forward slash

think underscore up underscore data open close parenthesis semicolon forward slash asterisk noncritical region asterisk forward slash

down open parenthesis ampersand db close parenthesis semicolon forward slash asterisk get exclusive access asterisk forward slash

write underscore data underscore base open close parenthesis semicolon forward slash asterisk update the data asterisk forward slash

up open parenthesis ampersand db close parenthesis semicolon forward slash asterisk release exclusive access asterisk forward slash

close curly bracket

close curly bracket

Back