具有多个关键部分以同步两个共享队列

时间:2013-07-04 06:51:07

标签: c windows multithreading winapi synchronization

我有两个40个线程写入共享队列A,一个线程从共享队列A读取。

我使用

同步了线程
  

EnterCriticalSection的(安培; CS);

     

//做点什么

     

LeaveCriticalSection(安培; CS);

现在有另一个共享队列B,40个线程将写入共享队列B,另一个分离的线程将从此共享队列B读取。 现在,为了共享这个共享队列B并在线程之间进行同步,我是否需要一个单独的关键部分让我们说csB?或者只有一个关键部分可以达到目的吗?

1 个答案:

答案 0 :(得分:1)

你没有拥有来使用单独的关键部分,但使用单独的关键部分将允许更多的并行性。如果来自不同队列的读取和写入高度同步,则可以将队列B上的所有操作放在用于队列A的相同关键部分中,在这种情况下,可以重用关键部分。但请注意,这种重用也可能导致死锁情况。

请注意,“关键部分”实际上是一个线程中的一系列代码。不同的关键部分可以共享的是这些代码范围的保护(通常是信号量)。因此,操作某个队列的所有代码范围都由相同的防护保护,以确保队列上的更新不会相互干扰,因为这可能导致队列损坏。