1

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

我已经使用同步线程

EnterCriticalSection(&cs);

//做一点事

LeaveCriticalSection(&cs);

现在有另一个共享队列 B 和 40 个线程将写入共享队列 B,另一个单独的线程将从这个共享队列 B 读取。现在要共享这个共享队列 B 并在线程之间同步它,我需要有一个单独的关键部分可以说 csB?还是只有一个关键部分 cs 可以达到目的?

4

1 回答 1

1

您不必使用单独的临界区,但使用单独的临界区将允许更多的并行性。如果不同队列的读写高度同步,您可以将队列 B 上的所有操作放在队列 A 使用的相同临界区中,在这种情况下,可以重用临界区。但是请注意,这种重用也可能导致可能的死锁情况。

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

于 2013-07-04T07:01:34.710 回答