c++ - 多线程 C 程序中的信号量互斥并发问题

标签 c++ c

我如何设计多线程 C 程序来避免信号量互斥并发

最佳答案

有几种方法。

最好的方法是消除线程之间的所有共享数据。虽然这并不总是可行,但尽可能多地消除共享数据总是好的。

之后,您需要开始研究无锁编程。无锁编程现在有点流行,但不为人知的 secret 是,使用基于锁的并发(如互斥锁和信号量)通常是一个更好的主意。无锁编程很难正确。查看 Herb Sutter 关于该主题的文章或维基百科页面。那里有很多关于无锁同步的好资源。

介于两者之间的是关键部分。如果您在 Windows 上编程,关键部分应该比互斥体更受欢迎,因为它们做了一些工作来避免完全互斥体锁定和解锁的开销。首先尝试这些,如果您的性能 Not Acceptable (或者您的目标平台没有关键部分),那么您可以研究无锁技术。

关于c++ - 多线程 C 程序中的信号量互斥并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/850305/

相关文章:

c++ - addNode 和 addChild 的区别

c - 如何在实现分析时处理溢出

c - 在使用套接字进行进程间通信期间,strcmp 的行为似乎很奇怪

C++:如何在 for 循环中排除对称对

c++ - 如何将十六进制字符串转换为无符号长整数?

c - pthread_self() 没有返回有意义的线程 ID?

c - 使用 glPrimitiveRestartIndex() 进行曲面 segmentation ?

c - 链接器如何确定 .rodata 部分中某些数据的地址?

c++ - 冲突的不匹配标签与标准库一起编译,但不以其他方式编译

c++ - 错误 : Control may reach end of non-void function/