我如何设计多线程 C 程序来避免信号量互斥并发
最佳答案
有几种方法。
最好的方法是消除线程之间的所有共享数据。虽然这并不总是可行,但尽可能多地消除共享数据总是好的。
之后,您需要开始研究无锁编程。无锁编程现在有点流行,但不为人知的 secret 是,使用基于锁的并发(如互斥锁和信号量)通常是一个更好的主意。无锁编程很难正确。查看 Herb Sutter 关于该主题的文章或维基百科页面。那里有很多关于无锁同步的好资源。
介于两者之间的是关键部分。如果您在 Windows 上编程,关键部分应该比互斥体更受欢迎,因为它们做了一些工作来避免完全互斥体锁定和解锁的开销。首先尝试这些,如果您的性能 Not Acceptable (或者您的目标平台没有关键部分),那么您可以研究无锁技术。
关于c++ - 多线程 C 程序中的信号量互斥并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/850305/