标签:class blog code ext 2014 问题
读者优先
//读者写者问题-读者优先 #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("读者 %s-------------------------对wmutex已加锁\n",lpParam); } Readcount++; ReleaseMutex(rmutex); printf("读者 %s 开始读操作\n",lpParam); for(int i=0;i<5;i++) { Sleep(1); printf("读者 %s 正在读\n"); } printf("读者 %s 读操作完毕\n",lpParam); WaitForSingleObject(rmutex,INFINITE); Readcount--; if(Readcount==0) { ReleaseMutex(wmutex); printf("读者 %s-------------------------对wmutex已解锁\n",lpParam); } ReleaseMutex(rmutex); printf("读者 %s ******死亡\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("写者 %s-------------------------对wmutex已加锁\n",lpParam); printf("写者 %s 开始写操作\n",lpParam); for(int i=0;i<5;i++) { Sleep(1); printf("写者 %s 正在写\n"); } printf("写者 %s 写操作完毕\n",lpParam); ReleaseMutex(wmutex); printf("写者 %s-------------------------对wmutext已解锁\n",lpParam); printf("写者 %s ******死亡\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("读者 %s 创建并申请读\n",r[i]); CreateThread(NULL,0,read,r[i],0,NULL); if(i>=5) { printf("写者 %s 创建并申请写\n",w[i-5]); CreateThread(NULL,0,write,w[i-5],0,NULL); } } Sleep(10000); return 0; }
写者优先
//读者写者问题-写者优先 #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("读者 %s-------------------------对wmutex已加锁\n",lpParam); } Readcount++; ReleaseMutex(rmutex); //read操作 printf("读者 %s 开始读操作\n",lpParam); for(int i=0; i<5; i++) { Sleep(1); printf("读者 %s 正在读\n"); } printf("读者 %s 读操作完毕\n",lpParam); WaitForSingleObject(rmutex,INFINITE); Readcount--; if(Readcount==0) { ReleaseMutex(wmutex); printf("读者 %s-------------------------对wmutex已解锁\n",lpParam); } ReleaseMutex(rmutex); printf("读者 %s ******死亡\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("写者 %s-------------------------对wmutex已加锁\n",lpParam); printf("写者 %s 开始写操作\n",lpParam); for(int i=0; i<5; i++) { Sleep(1); printf("写者 %s 正在写\n"); } printf("写者 %s 写操作完毕\n",lpParam); ReleaseMutex(wmutex); printf("写者 %s-------------------------对wmutext已解锁\n",lpParam); printf("写者 %s ******死亡\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]= {"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("读者 %s 创建并申请读\n",r[i]); CreateThread(NULL,0,read,r[i],0,NULL); if(i>=5) { printf("写者 %s 创建并申请写\n",w[i-5]); CreateThread(NULL,0,write,w[i-5],0,NULL); } } Sleep(10000); return 0; }
标签:class blog code ext 2014 问题
原文地址:http://blog.csdn.net/crescent__moon/article/details/34541097