【问题标题】:Any advantage to invoking gcc _without_ -pthread?调用 gcc _without_ -pthread 有什么好处?
【发布时间】:2016-03-18 08:52:40
【问题描述】:

我们知道添加-pthreadmakes GCC use reentrant/thread-safe code(编译C/C++代码时)。虽然我猜这是真的,但如果您允许不可重入,您可能会在这里和那里节省几个周期 - 我想知道 总是指定 -pthread 是否有任何实际优势。有吗?

【问题讨论】:

  • 生成的代码无论如何都不能重入?我不知道 gcc 使用起来非常不安全。
  • ..或者你只是说图书馆?我可以理解:)
  • @MartinJames:我的意思是链接中描述的意思。 #define REENTRANT 取决于 -lpthread。我不确定到底发生了什么变化。但这里的答案已经提供了一个重要的例子。

标签: c++ c gcc compilation


【解决方案1】:

一个例子:std::shared_ptrdoesn't use locking when compiled without -pthread 的 libstdc++ 实现,如果您在单线程环境中大量使用共享指针,它可以大大提高性能。

【讨论】:

    【解决方案2】:

    在 c++ 中,该语言的理念一直是“您无需为不需要的东西付费”。如果您的程序运行单线程并且不需要可重入函数,则没有真正的动机添加-pthread

    使用可重入函数的成本总是会高于或等于函数的不可重入版本。要么及时(您必须锁定互斥锁以保护变量),要么为每个函数调用分配内存,而不是使用静态缓冲区。

    此外,某些平台可能没有pthreads 实现(pthreads 毕竟是 POSIX 的东西)。

    【讨论】:

    • 我看不出它是如何回答这个问题的。
    • @YSC:实际上我认为这是一个有效的观点。强制您重入将是“方法上的不一致”。这种一致性是一种好处。
    • @YSC :确实,我可以更清楚地说明,使用某些函数的可重入版本(例如,strok 和 strok_r)总是会产生性能成本,因此如果您不需要 pthread(并且性能是一个问题),您可能不想使用它。
    • OP 已经知道了。详细信息有望得到一个好的答案。
    • 嗯...第 (1) 和 (3) 段与问题无关。第 (2) 段涉及该主题,但暗示 -pthread 强制重入(并且会影响性​​能),这需要某种证据或至少是一个体面的例子,IMO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多