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

标签 c windows multithreading winapi synchronization

我有两个 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/

相关文章:

java - 在 Java 中,更改对并发读取的 HashMap 的引用是否安全

c++ - 设计 C++ 休息客户端

c - C 中的简单链表函数

c - 检测何时从程序打开 fifo

c++ - 为什么我得到错误?重载运算符 []

c++ - (Windows HID API)HidD_GetPreparsedData() 由于句柄不正确而在 WM_INPUT 消息处理程序中失败?

c++ - 是否有任何好的算法实现来检测相似图像?

c - 在整数用户输入中输入字符不会返回错误,而是将其转换为整数?

带有libpcap的c++无法在Windows下编译

python - CPU 为 100% 用于多处理队列以从多个摄像机获取帧