如何在C++中正确地进行线程化?

Ale*_*lex 4 c++ concurrency multithreading

我有一个相当大的动态稀疏矩阵对象类来编写,我希望发生以下情况:一个线程处理将元素放入矩阵,另一个处理从矩阵读取.

这两者冲突的唯一时间是他们想要同时访问同一行/列.因此,我已经确定每个行/列的简单互斥锁就足够了.

现在这是我第一次用C/C++实际进行线程化,我想通过书籍来做,可以这么说.我有两个问题.

  1. 如何生成这些线程?这是一个语言问题.
  2. 如何尽可能高效地实现锁定?我想如果存在冲突,那么请求线程将自己置于行中并等待资源被释放.但是,我该如何实现清醒呢?我可以对内存位置进行循环轮询,但这并不优雅.理想情况下,我认为基于中断的方法是最好的.

Ben*_*ins 18

如果这是您第一次进行多线程,请使用Boost.Threads库.它的语义(包括同步机制)非常简单,您的实现将是可移植的.

http://www.boost.org/doc/libs/1_42_0/doc/html/thread.html


Tho*_*mas 6

C++本身不提供任何线程.在Windows上,您可以使用CreateThread.在UNIX上,您可以使用POSIX线程(pthreads).

应该不需要实现自己的并发原语.例如,在Windows上,您可以使用创建互斥对象CreateMutex,并使用WaitForSingleObject它等待它被释放.