我不完全确定以下解决消费者生产者问题的方法有什么问题:
我假设有一系列事件会让事情搞砸但是我看不到它。任何人都可以为我挑选这个吗?
答案 0 :(得分:2)
考虑c += 1
通常由序列实现"加载c","增加c","存储c",然后查看不同的方式c += 1
和c -= 1
可以交错,因为它们不能保证是原子操作。这是一个这样的(假设c = 0
在开始时):
Thread 1 Thread 2
-------- --------
load c
load c
decrement
increment
store c
store c
您可能会在执行c += 1
和c -= 1
之后,c
将恢复到其原始值0
,但在这种情况下,它会实际上是-1
,这有点问题。线程1希望看到c == 1
,因为它只是读取0
,将其递增并存储生成的1
;因此,线程1的其余部分可能会有点困惑。