信号量 - 消费者生产者的例子

时间:2013-11-25 17:53:40

标签: synchronization operating-system mutex semaphore

我不完全确定以下解决消费者生产者问题的方法有什么问题:

enter image description here

我假设有一系列事件会让事情搞砸但是我看不到它。任何人都可以为我挑选这个吗?

1 个答案:

答案 0 :(得分:2)

考虑c += 1通常由序列实现"加载c","增加c","存储c",然后查看不同的方式c += 1c -= 1可以交错,因为它们不能保证是原子操作。这是一个这样的(假设c = 0在开始时):

Thread 1                  Thread 2
--------                  --------
load c
                          load c
                          decrement
increment
store c
                          store c

您可能会在执行c += 1c -= 1之后,c将恢复到其原始值0,但在这种情况下,它会实际上是-1,这有点问题。线程1希望看到c == 1,因为它只是读取0,将其递增并存储生成的1;因此,线程1的其余部分可能会有点困惑。