Linux 对我来说是一个新平台。我在 Windows 上使用 C++ 编写代码多年,并且已经习惯了该平台上的多线程。
当我需要在 linux 平台上学习 c++ 时,C++11 随之而来。
Linux 似乎大部分使用 pthreads - 好吧,还有 boost::threads,QT 也有自己的线程。但是随着 C++11 的出现,std::thread 是一种全新的(跨平台和 C++ 标准)线程处理方式。
所以我想我必须学习 pthreads 和 std::threads。最终,std::thread 似乎更重要,但那里有很多遗留代码,所以我必须了解两者。
对于 Windows 上的线程同步,我会使用 WaitForMultipleObjects等待一些任务完成,然后再继续进一步的工作。
pthread 是否存在类似的同步机制? std::threads?
我看过pthread_join ,而且它似乎可以一次只等待一个线程。我是否错过了另一个 pthread 调用?
最佳答案
std::thread
是 boost::thread
accepted into C++11有一些额外的东西。我的理解是,如果 boost::thread
在代码中被替换为 std::thread
,它应该仍然可以编译和工作。
boost::thread
基于 pthreads
设计,为线程、互斥锁和条件变量提供精简的 C++ 包装器。线程取消虽然不在 C++11 的范围内,因为没有就它在 C++ 中的工作方式达成一致。
因此,通过学习 pthreads
,您还可以学习 std::thread
概念。 std::thread
在 pthreads
C API 之上添加了大部分语法糖和便利函数。
关于 WaitForMultipleObjects()
,pthreads
和 std::thread
都没有提供与其 bWaitAll=FALSE
模式,但是,在 UNIX 上通常使用管道和 select()
或更现代的 eventfd()
和 epoll()
来模拟它在 Linux 上。 bWaitAll=TRUE
模式可以通过依次等待所有任务来模拟,因为它不会继续,直到所有对象都准备好为止。
关于c++ - 在 linux 上学习线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818254/