用信号量解决读者写者问题
2016-05-05 11:28
239 查看
问题描述:
多个进程共享一个数据区,这些进程分为两组:Markdown和扩展Markdown简洁的语法
代码块高亮
读者进程:只读数据区中的数据
写着进程:只往数据区写数据
要求满足的条件:
允许多个读者同时执行读操作
不允许多个写者同时操作
不允许读者、写者同时操作
第一类读者写者问题:读者优先
如果读者执行:无其他读者、写者,该读者可以读
若已有写者等待,但有其他读者正在读,则该读者也可以读
若有写者正在写,则该读者必须等
如果写者执行
无其他读者、写者,该写者可以写
若有读者正在读,该写者等待
若有其他读者正在写,该写者等待
解法实现:
void reader(void) { while(TRUE) { P(mutex); rc = rc + 1; if(rc == 1) /*第一个读者*/ { P(W); /*不需要每给读者都做*/ } V(mutex); 读操作; P(mutex); rc = rc - 1; if (rc == 0)/*最后一个读者*/ { V(w); } V(mutex); 其他操作; } } void writer(void) { while(TRUE) { ...... P(W); 写操作; V(w); ...... } }
应用实例:
应用场景
如果每个执行实体对临界区的访问或者是读或者是写共享变量,但它们都不会即读又写时,读写锁是最好的选择
实例
LINUX的IPX路由代码中使用了读写锁,用ipx_routes_lock的读写锁保护IPX路由表的并发访问
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- C#实现进程管理的启动和停止实例
- DOS中判断进程是否存在的方法
- C#进程监控方法实例分析
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- 批处理 结束麦咖啡进程的代码
- PowerShell查看进程的所属用户
- C#实现强制关闭当前程序进程
- C#实现读取被进程占用的文件实现方法
- C#获取进程或线程相关信息的方法
- 简单掌握Windows中C#启动外部程序进程的方法
- C#实现判断操作系统是否为Win8以上版本
- 简要对比C语言中三个用于退出进程的函数
- VC实现获取当前正在运行的进程
- win32下进程间通信(共享内存)实例分析
- C语言中操作进程信号的相关函数使用详解
- C语言实现在windows服务中新建进程的方法
- VC下通过系统快照实现进程管理的方法
- C++基于CreateToolhelp32Snapshot获取系统进程实例