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