【发布时间】:2011-07-27 04:27:08
【问题描述】:
假设我们有一个共享队列(使用数组实现),两个线程可以访问该队列,一个用于从中读取数据,另一个用于向其写入数据。现在,我有一个同步问题。我正在使用 Win32 API(EnterCriticalSection 等)来实现这一点。
但我的好奇心是队列的入队和出队操作中的临界区代码是什么?
仅仅因为,两个线程正在使用共享资源?为什么我看不到任何问题是这样的:前后端都被维护了,所以当ReaderThread读取时,它可以从前端读取,而当WriterThread写入时,它可以很容易地写入后端。
可能会出现哪些潜在问题?
【问题讨论】:
-
如果您只有 1 个条目因此 tail = head 怎么办?
-
应该没问题。如果您锁定了该部分,则读取器将获取数据而无需写入器在读取器顶部添加数据,并且读取器不会删除数据,从而导致下一个空槽偏移量对于写入器不正确。实际上,只要作者从不改变前面,你不需要一个关键部分,除了读者正在删除它已经阅读的部分,如果作者同时试图写,读者改变了下一个从作者下方偏移,因为它没有同步。
标签: c++ multithreading critical-section