c++ - 在 linux 上学习线程

标签 c++ linux c++11 pthreads stdthread

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::threadboost::thread accepted into C++11有一些额外的东西。我的理解是,如果 boost::thread 在代码中被替换为 std::thread,它应该仍然可以编译和工作。

boost::thread 基于 pthreads 设计,为线程、互斥锁和条件变量提供精简的 C++ 包装器。线程取消虽然不在 C++11 的范围内,因为没有就它在 C++ 中的工作方式达成一致。

因此,通过学习 pthreads,您还可以学习 std::thread 概念。 std::threadpthreads C API 之上添加了大部分语法糖和便利函数。

关于 WaitForMultipleObjects()pthreadsstd::thread 都没有提供与其 bWaitAll=FALSE 模式,但是,在 UNIX 上通常使用管道和 select() 或更现代的 eventfd()epoll() 来模拟它在 Linux 上。 bWaitAll=TRUE 模式可以通过依次等待所有任务来模拟,因为它不会继续,直到所有对象都准备好为止。

关于c++ - 在 linux 上学习线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818254/

相关文章:

C++ 和 XML : parsing XML in C++ working in Ubuntu Environment

linux - ps 命令 -o 选项给出 "ERROR: Garbage option"

linux - 想要在 tar 命令中排除文件夹

c++ - std::generic_category() 没用?

c++ - 整数常量太大以至于在将最大类型值分配给枚举时它是无符号的

c++ - 为什么当从 VSCode 使用 GDB 时遇到断点时,GDB 会使我的程序崩溃?

c++ - 如何在cmake中使用#include保持目录结构?

c++ - 如何将 NULL 或 nullptr 传递给接收 unique_ptr 参数的函数?

linux - 如何grep精准匹配

c++ - undefined reference `pthread_create' 使用 ASIO 和 std::thread 制作 C++11 应用程序时出错