信号量解决经典进程同步问题:生产者消费者模型,读者写者问题以及哲学家问题

Process Synchronization

Classical Problems of Synchronization

Bounded-Buffer Problem

semaphore full, empty, mutex;
Initially:
full = 0, empty = n, mutex = 1
do { … 
	produce an item in nextp
    … 
    wait(empty);
    wait(mutex);
    … 
    add nextp to buffer
    … 
    signal(mutex); 
    signal(full); 
    } while (1);
do {
	wait(full) 
	wait(mutex);
	… 
	remove an item from buffer to nextc
	…
	signal(mutex);
	signal(empty);
	… 
	consume the item in nextc …
	} while (1);

Readers-Writers Problem

读者优先 写者优先

semaphore mutex, wrt;
Initially
mutex = 1, wrt = 1, readcount = 0
wait(mutex);
readcount++; 
if (readcount == 1) 
	wait(wrt);
signal(mutex);
	…
reading is performed
	… 
wait(mutex);
readcount--;
if (readcount == 0) 
signal(wrt);
signal(mutex):

Dining-Philosophers Problem

Philosopher i:
	do { 
		wait(chopstick[i])
        wait(chopstick[(i+1) % 5])
        … 
        eat
        … 
        signal(chopstick[i]);
        signal(chopstick[(i+1) % 5]);
        …
        think
        … 
      } while (1);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值