Reader first
// Reader writer problem-reader priority # include <stdio. h> # include <process. h> # include <windows. h> using namespace STD; handle rmutex, wmutex; int readcount = 0; int read_num = 10, write_num = 5; DWORD winapi read (lpvoid lpparam) {waitforsingleobject (rmutex, infinite ); if (readcount = 0) {waitforsingleobject (wmutex, infinite); printf ("Reader % s ------------------------- locks wmutex \ n", lpparam);} readcount ++; releasemutex (rmutex); printf ("Reader % s start read operation \ n", lpparam); For (INT I = 0; I <5; I ++) {sleep (1); printf ("Reader % s reading \ n");} printf ("Reader % s read operation completed \ n", lpparam); waitforsingleobject (rmutex, infinite); readcount --; If (readcount = 0) {releasemutex (wmutex); printf ("Reader % s ------------------------- unlock wmutex \ n", lpparam );} releasemutex (rmutex); printf ("Reader % s ****** death \ n", lpparam); // sleep (10000); While (true) {sleep (100); If (readcount = 0) {releasemutex (wmutex); break ;}} sleep (10000);} DWORD winapi write (lpvoid lpparam) {waitforsingleobject (wmutex, infinite); printf ("writer % s ------------------------- locks wmutex \ n", lpparam); printf ("writer % s start write operation \ n ", lpparam); For (INT I = 0; I <5; I ++) {sleep (1); printf ("writer % s writing \ n ");} printf ("writer % s write operation completed \ n", lpparam); releasemutex (wmutex); printf ("writer % s ----------------------- unlock wmutext \ n", lpparam ); printf ("writer % s ****** death \ n"); sleep (10000);} int main () {rmutex = createmutex (null, false, null ); wmutex = createmutex (null, false, null); char * R [10] = {"A", "B", "C", "D", "E ", "F", "g", "H", "I", "J"}; char * W [5] = {"A", "B ", "C", "D", "E"}; For (INT I = 0; I <read_num; I ++) {printf ("Reader % s create and apply for read \ n", R [I]); createthread (null, 0, read, R [I], 0, null ); if (I> = 5) {printf ("writer % s create and apply to write \ n", W [I-5]); createthread (null, 0, write, W [I-5], 0, null) ;}} sleep (10000); Return 0 ;}
Writer Priority
// Reader writer problem-Writer Priority # include <stdio. h> # include <windows. h> using namespace STD; handle rmutex, wmutex, rwmutex; int readcount = 0; int read_num = 10, write_num = 5; DWORD winapi read (lpvoid lpparam) {waitforsingleobject (rwmutex, infinite); releasemutex (rwmutex); waitforsingleobject (rmutex, infinite); If (readcount = 0) {waitforsingleobject (wmutex, infinite ); printf ("Reader % s ------------------------- locks wmutex \ n", lpparam) ;}readcount ++; releasemutex (rmutex ); // read printf ("Reader % s start read operation \ n", lpparam); For (INT I = 0; I <5; I ++) {sleep (1); printf ("Reader % s reading \ n");} printf ("Reader % s read operation completed \ n", lpparam); waitforsingleobject (rmutex, infinite); readcount --; If (readcount = 0) {releasemutex (wmutex); printf ("Reader % s ------------------------- unlock wmutex \ n", lpparam );} releasemutex (rmutex); printf ("Reader % s ****** death \ n", lpparam); While (true) {sleep (100 ); if (readcount = 0) {releasemutex (wmutex); break ;}} sleep (10000) ;} DWORD winapi write (lpvoid lpparam) {waitforsingleobject (rwmutex, infinite ); waitforsingleobject (wmutex, infinite); printf ("writer % s --------------------------- locks wmutex \ n", lpparam); printf ("writer % s start write operation \ n ", lpparam); For (INT I = 0; I <5; I ++) {sleep (1); printf ("writer % s writing \ n ");} printf ("writer % s write operation completed \ n", lpparam); releasemutex (wmutex); printf ("writer % s ----------------------- unlock wmutext \ n", lpparam ); printf ("writer % s ****** death \ n"); releasemutex (rwmutex); sleep (10000);} int main () {rmutex = createmutex (null, false, null); wmutex = createmutex (null, false, null); rwmutex = createmutex (null, false, null); char * R [10] = {"", "B", "C", "D", "E", "F", "g", "H", "I", "J "}; char * W [5] = {"A", "B", "C", "D", "E"}; For (INT I = 0; I <read_num; I ++) {printf ("Reader % s create and apply read \ n", R [I]); createthread (null, 0, read, R [I], 0, null); if (I> = 5) {printf ("writer % s created and applied to write \ n", W [I-5]); createthread (null, 0, write, W [I-5], 0, null) ;}} sleep (10000); Return 0 ;}