IPC之读者-写者问题

Posted 扑克face

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IPC之读者-写者问题相关的知识,希望对你有一定的参考价值。

问题:

  Courtois et al于1971年提出。

  可以多读取,但是写入时不允许读取、写入。

  

 1 typedef int semaphore;
 2 semaphore mutex = 1;
 3 semaphore db = 1;
 4 int rc = 0;
 5 void reader(void)
 6 {
 7     while(TRUE)
 8     {
 9          down(&mutex);
10          rc += 1;
11          if(rc == 1)down(&db);
12          up(&mutex);
13          read_date();
14          down(&mutex);
15          rc -= 1;
16          if(rc == 0)up(&db);
17          up(&mutex);
18     }
19 }
20 void writer(void)
21 {
22     while(TRUE)
23     {
24         think_up_data();
25         down(&mutex);
26         write_data();
27         up(&mutex);
28     }
29 }

临界区变量互斥操作

读:

第一次访问数据库信号量down

访问全部退出数据库信号量up

写:

只有信号量可down才写

 

自第一次访问,数据库信号量就一直不可再down,所以写不了,必须全读完才可写(读者优先)

以上是关于IPC之读者-写者问题的主要内容,如果未能解决你的问题,请参考以下文章

用C语言编程实现用信号量实现读者--写者问题(要源代码)

C++ 多线程学习笔记:读者-写者问题模拟

Linux练习_线程练习_读者写者问题

读者写者问题,单例模式,自旋锁

用信号量和读写锁解决读者写者问题

线程同步之读写锁(锁操作的补充)