readers and writers problem 读者写者问题 写者优先 C++实现
来源:互联网 发布:软件开发工程师认证 编辑:程序博客网 时间:2024/05/16 16:24
参考http://en.wikipedia.org/wiki/Readers-writers_problem
第二类读者写者问题,写优先
#include <cstdio>#include <Windows.h>#include <ctime>int readcount, writecount;HANDLE mutex_1; // 限制readcountHANDLE mutex_2; // 限制writecountHANDLE mutex_3; // 限制rHANDLE r; // 有没有readerHANDLE w; // 有没有writer/*能够并发地读,不能并发地写,写的时候不能读,写优先*/DWORD WINAPI reader_thread(void *param);DWORD WINAPI writer_thread(void *param);DWORD WINAPI reader_thread(void * param){int my_id = *(int *)param;printf("%dth reader come\n", my_id);WaitForSingleObject(mutex_3, INFINITE);WaitForSingleObject(r,INFINITE);WaitForSingleObject(mutex_1, INFINITE);readcount += 1;if(readcount == 1) WaitForSingleObject(w, INFINITE);//只要有reader已经在read,就不让一个write去写ReleaseMutex(mutex_1);ReleaseMutex(r);ReleaseMutex(mutex_3);/*reading*/printf("%dth reader is doing reading\n", my_id);Sleep(2000);printf("%dth reader finish reading\n", my_id);WaitForSingleObject(mutex_1, INFINITE);readcount -= 1;if (readcount == 0) ReleaseMutex(w);ReleaseMutex(mutex_1);return 1;}DWORD WINAPI writer_thread(void *param){int my_id = *(int *)param;printf("%dth writer come\n", my_id);WaitForSingleObject(mutex_2, INFINITE);writecount += 1;if(writecount == 1) WaitForSingleObject(r, INFINITE);//只要有writer存在,就reader在后面等待ReleaseMutex(mutex_2);WaitForSingleObject(w, INFINITE);printf("%dth writer is writing\n", my_id);Sleep(2000);printf("%dth writer finish writing\n", my_id);WaitForSingleObject(mutex_2, INFINITE);writecount -= 1;if(writecount == 0)ReleaseMutex(r);ReleaseMutex(mutex_2);return 1;}#define NUM 100000int reader_id,writer_id;int temp_r[NUM], temp_w[NUM];void gen(){HANDLE h;if(rand()%2==0) // 产生reader{reader_id++;temp_r[reader_id] = reader_id;h = CreateThread(NULL, 0, reader_thread, (void *)(&temp_r[reader_id]), 0, NULL);}else // 产生writer{writer_id++;temp_w[writer_id] = writer_id;h = CreateThread(NULL, 0, writer_thread, (void *)(&temp_w[writer_id]), 0, NULL);}}int main (){mutex_1 = CreateMutex(NULL, FALSE, L"mutex_1");mutex_2 = CreateMutex(NULL, FALSE, L"mutex_2");mutex_3 = CreateMutex(NULL, FALSE, L"mutex_3");r = CreateMutex(NULL, FALSE, L"r");w = CreateMutex(NULL, FALSE, L"w");srand(time(NULL));while(reader_id<NUM && writer_id<NUM){if(rand()%2 == 0){gen();}if(rand()%3 == 0){gen();}if(rand()%3 == 0){gen();}Sleep(3000);}return 0;}
0 0
- readers and writers problem 读者写者问题 写者优先 C++实现
- C 优先读者 读者/写者问题
- 有名信号量实现读者-写者问题(读者优先)
- 读者写者问题之读者优先
- “读者-写者问题”的写者优先算法实现
- 读者-写者同步问题的写者优先实现
- 读者-写者优先
- 优先读者/写者问题—操作系统
- 使用信号量解决读者写者问题--读者优先
- 优先读者的读者/写者问题的算法设计
- linux 读者写者问题 读者优先c++
- 读者写者问题之写者优先(java)
- 读者写者问题之写者优先(java)
- 读者-写者问题 写者优先与公平竞争
- 读者-写者问题 写者优先与公平竞争
- 读者写者问题之写者优先
- 使用信号量解决读者写者问题--写者优先
- 读者写者问题-写者优先参考答案
- win7下的超级终端的移植
- sql 语句中可以并行的操作
- 如果争论不欢而散,那么必有一方是虚伪的
- AutoCAD .Net开发指南第4部分关于标注和公差的内容翻译完了!
- IOS视频播放器开发系列(二)——前期尝试或探索
- readers and writers problem 读者写者问题 写者优先 C++实现
- final 关键字
- java基础面试题2
- 跟我一起写 Makefile(四) 转自http://blog.csdn.net/haoel/article/details/2889
- pthread_cond_signal和pthread_cond_wait简介
- ./configure详解
- 充值系列——充值系统安全问题(四)
- Android动画fillAfter和fillBefore
- mmap