typedef int semaphore; int rc, wc; rc = wc = 0; semaphore rc_mutex, wc_mutex, readersQueue, db rc_mutex = wc_mutex = readersQueue = db = 1; void reader(void) { down(&readersQueue); down(&rc_mutex); rc++; if (rc==1) down(&db); up(&rc_mutex); up(&readersQueue); read_db(); /* κρίσιμο τμήμα */ down(&rc_mutex); rc--; if (rc==0) up(&db); up(&rc_mutex); } void writer(void) { down(&wc_mutex); wc++; if (wc==1) down(&readersQueue); up(&wc_mutex); down(&db); write_db(); up(&db); down(&wc_mutex); wc--; if (wc==0) up(&readersQueue); up(&wc_mutex); }