IPC之读者-写者问题

A问题:

  Courtois et al于1971年提出。

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

A解决:

 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,所以写不了,必须全读完才可写(读者优先)

转载于:https://www.cnblogs.com/pokerface/p/8901941.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值