一旦std:thread进入C ++ Ox,pthreads是不是会过时[关闭]

Posted

技术标签:

【中文标题】一旦std:thread进入C ++ Ox,pthreads是不是会过时[关闭]【英文标题】:Will pthreads become obsolete once std:thread makes into C++Ox [closed]一旦std:thread进入C ++ Ox,pthreads是否会过时[关闭] 【发布时间】:2009-08-13 17:52:17 【问题描述】:

显然我们仍然会维护它,但是一旦 C++ 标准保证它的用处,它会有多大用处。

随着新标准的出现,同步原语(互斥体、条件变量)会怎样?

你认为 pthread 比 std::thread 更难掌握吗?

【问题讨论】:

奇怪的问题。其他语言(如 C)使用 pthread。 编辑您的原始问题以提出完全不同的问题并不是一个好主意。 我打赌 GNU std::thread 实现将在内部使用 pthreads。因此,如果不再有 pthread,std::thread 将无法工作:-) 基于意见投票结束。 【参考方案1】:

C 不会消失。 POSIX 不会消失。用 C 语言为 POSIX 编写的多线程代码不会消失。所以 pthreads 不会消失。

std::thread 的许多实现将在后台使用 pthread。

“Pthreads API 在 ANSI/IEEE POSIX 1003.1 - 1995 标准中定义。” -- POSIX 线程编程https://computing.llnl.gov/tutorials/pthreads/

【讨论】:

嗯,使用标准开发跨平台比使用平台特定库更容易...... 人们仍然会用 C 编程,而 C++0x 对他们没有帮助。 我不是在谈论 C... 我是在谈论 C++ @enigma:C++ 通常构建在 C 库之上(从头开始创建东西很少有用)。因此,任何 std::thread 实现都将是 C 库(可能是 pthreads)之上的包装器。 好吧,fstream 并没有使 open/create/read/write POSIX 调用即使在 C++ 中也过时 - 这有什么不同?【参考方案2】:

POSIX 是一种操作系统标准。 C++0X 是一种语言标准。在第二个中拥有线程不会使第一个过时。两者之间存在协作,因此第二个可以在第一个上实施。 (还有一个为 POSIX 提供 C++ 接口的工作正在进行中)。

【讨论】:

【参考方案3】:

支持 pthread 的平台上的 C++ 实现可能会根据 pthread 实现语言功能 - 所以不,它不会过时。

【讨论】:

【参考方案4】:

std::thread 不支持优先级、控制线程堆栈的大小、控制调度策略或控制处理器亲和性。

调度类和优先级对于实时系统至关重要。处理器亲和力和堆栈大小对于高性能系统非常重要。此类应用程序将继续使用本机线程设施,可能除了 std::thread 之外,也可能代替 std::thread,可能通过提供所需功能的供应商扩展以及 std::thread。

【讨论】:

你是对的。无论如何,我会在colaboration 打赌。【参考方案5】:

不管技术比较如何,我们花了十年的时间才从所有主要平台/供应商那里获得合理体面的 C++ 98 支持。仅此一项就确保了 pthread 在 2020 年会变得强大。

【讨论】:

boost 已经完成了大部分实现线程库的工作 - 他们已经为不完全支持的编译器提供了一个 TR1 仿真库。不久之后所有主要编译器都支持库功能,尽管可能需要这样的外部库。 G++已经实现了线程库,其实是:gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00568.html 在 Boost 中获得支持将无济于事,例如,Microsoft 为其编译器添加支持。即使他们可以,我也没有看到他们使用 boost 代码。我预计可能需要 5 年的时间,直到所有编译器(大部分)都拥有完整的 C++0x 线程支持,包括为所有极端情况提供正确的语义。这可能还包括对标准的更正,其中没有完全指定并且还没有人注意到。 嘿,你是对的! 2020 年来了又去,而 pthreads 则经久不衰。很好的预言。【参考方案6】:

也许对于新代码,使用标准中的内容是正确的方法。我们将不得不等待,看看主要编译器中的实现有多可靠。但是从 pthread 转换现有代码不会有太多好处,假设它现在正在工作。这包括在已经拥有大量 pthread 经验的商店中编写的新代码。

【讨论】:

【参考方案7】:

至少对于 boost 线程是正确的:

不支持栈大小参数 不支持setpshared属性

所以不...在 OS API 被认为过时之前,还有一些事情要做。 (顺便说一句,线程是通过 pthread 实现的)

【讨论】:

以上是关于一旦std:thread进入C ++ Ox,pthreads是不是会过时[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++11 多线程std:: async与std::thread的区别

std::thread

来自 c++11 的 std::thread 问题

C++11 的 std::thread 是不是与 POSIX 信号量兼容?

在 C++11 中通过引用 std::thread 传递对象

C++11 std::thread 和虚函数绑定