【发布时间】:2011-05-09 20:55:49
【问题描述】:
我正在实现一些简单的生产者/消费者程序,它有一些信号量和共享内存。为简单起见,我们假设我的程序中只有一块共享内存和一个信号量。
起初,我只需要将尝试写入共享内存块的代码视为关键部分。但是由于共享内存块由 1024 字节组成,我不能同时读取所有数据(这不是原子操作),所以当我从中读取时,生产者确实有可能来并开始在其中写入,因此读者将获得一半旧数据,一半新数据。由此,我只能认为我还必须将共享内存读取逻辑放在“信号量”块中。
现在,我有很多看起来像这样的代码:
if (sharedMemory[0] == '0') { ... }
在这种情况下,我只是在内存中寻找一个字符。我想我不必担心为此设置信号量,不是吗?
如果我有类似的东西怎么办
if (sharedMemory[0] == '0' && sharedMemory[1] == '1') { ... }
从我的角度来看,我猜这是 2 个操作,我不得不将其视为关键部分,因此必须在其周围放置一个信号量。我说的对吗?
谢谢!
【问题讨论】:
标签: multithreading locking semaphore shared-memory