Synchronization 信号量-消费者-生产者示例

Synchronization 信号量-消费者-生产者示例,synchronization,operating-system,mutex,semaphore,Synchronization,Operating System,Mutex,Semaphore,我不完全确定以下解决消费者-生产者问题的方法有什么问题: 我假设有一连串的事情会把事情搞砸,但我看不出来。有人能帮我分类吗?考虑到c+=1通常是通过顺序“load c”、“increment c”、“store c”实现的,然后看看c+=1和c-=1可以交错的不同方式,因为它们不能保证是原子操作。这里有一个这样的例子(假设开始时c=0): 在执行c+=1和c-=1之后,c将返回其原始值0,但在这种情况下,它实际上是-1,这有点问题。线程1希望看到c==1,因为它只是读取0,增加它并存储结果1;

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


我假设有一连串的事情会把事情搞砸,但我看不出来。有人能帮我分类吗?

考虑到
c+=1
通常是通过顺序“load c”、“increment c”、“store c”实现的,然后看看
c+=1
c-=1
可以交错的不同方式,因为它们不能保证是原子操作。这里有一个这样的例子(假设开始时c=0):

在执行
c+=1
c-=1
之后,
c
将返回其原始值
0
,但在这种情况下,它实际上是
-1
,这有点问题。线程1希望看到
c==1
,因为它只是读取
0
,增加它并存储结果
1
;因此线程1的其余部分可能会有点混乱

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