调用 gcc _without_ -pthread 有啥好处?
Posted
技术标签:
【中文标题】调用 gcc _without_ -pthread 有啥好处?【英文标题】:Any advantage to invoking gcc _without_ -pthread?调用 gcc _without_ -pthread 有什么好处? 【发布时间】:2016-03-18 08:52:40 【问题描述】:我们知道添加-pthread
makes GCC use reentrant/thread-safe code(编译C/C++代码时)。虽然我猜这是真的,但如果您允许不可重入,您可能会在这里和那里节省几个周期 - 我想知道 不 总是指定 -pthread
是否有任何实际优势。有吗?
【问题讨论】:
生成的代码无论如何都不能重入?我不知道 gcc 使用起来非常不安全。 ..或者你只是说图书馆?我可以理解:) @MartinJames:我的意思是链接中描述的意思。#define REENTRANT
取决于 -lpthread
。我不确定到底发生了什么变化。但这里的答案已经提供了一个重要的例子。
【参考方案1】:
一个例子:std::shared_ptr
doesn'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。以上是关于调用 gcc _without_ -pthread 有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章
相当于 gcc 的 __attribute__(cleanup) 的便携式
如何在 GCC (x86_64) 中使用内联汇编进行相对跳转/调用
将 SessionId 转换为用户帐户 SID _without_ WTSQuerySessionInformation?