我有两个 40 线程写入共享队列 A,还有一个线程从共享队列 A 读取。
我已经使用同步线程
EnterCriticalSection(&cs);
//Do something
LeaveCriticalSection(&cs);
现在有另一个共享队列 B,40 个线程将写入共享队列 B,另一个单独的线程将从该共享队列 B 读取数据。 现在,为了共享此共享队列 B 并在线程之间同步它,我是否需要有一个单独的关键部分(例如 csB)?或者只有一个关键部分 cs 可以达到目的?
最佳答案
您不必使用单独的关键部分,但使用单独的关键部分将允许更多的并行性。如果不同队列的读取和写入高度同步,您可以将队列 B 上的所有操作放在用于队列 A 的相同临界区中,在这种情况下,可以重用临界区。但请注意,这种重用也可能导致可能的死锁情况。
请注意,“关键部分”实际上是线程中的一系列代码。不同的关键部分可以共享的是这些代码范围的保护(通常是信号量)。因此,操作某个队列的所有代码范围都由同一守卫保护,以确保队列上的更新不会相互干扰,因为这可能会导致队列损坏。
关于c - 具有多个关键部分以同步两个共享队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17463617/