7

我发现了以下文章:使用 GCC 提供的原子锁操作来替换 pthread_mutex_lock 函数

它指的是GCC Atomic Builtins

这篇文章的建议是使用 GCC atomic builtins 而不是 pthread 同步工具。

这是一个好主意吗?

PS。mysql 帖子显然具有误导性。Atomic Builtins 不能替代所有 pthread 工具。例如,锁定要求,如果无法获得锁定,则线程必须等待。换句话说,它要求操作系统等待,因此等待是被动的。简单的 GCC 内置不能做到这一点。

4

5 回答 5

5

这是一个好主意吗?

如果您打算用 gcc 以外的东西编译代码,则不会。pthreads 是否会给您带来任何特定问题?

于 2009-07-21T08:53:58.113 回答
2

如果您已经在使用 pthread,并且 pthread 锁定函数已经完成了您想要的工作,那么最好使用 pthread 锁定函数。

这些原子内置函数只是高级原语的构建块;编写这些更高级的原语往往很棘手,任何错误都可能导致需要很长时间才能出现的错误(因为它们通常取决于时间)。如果您已经有一个具有更高级别原语的库,可以满足您的需求并且足够快(并且不要因为您必须进行函数调用而认为它们太慢),最好不要重新发明车轮。

于 2009-07-22T13:24:53.963 回答
1

不。GCC 内置插件可能对编写操作系统、libc 和 pthreads 本身的人很有意义,但对于您的普通应用程序来说,没有理由不使用 pthreads 方法。

即使你总是使用 GCC,有一天你可能想要运行一个静态分析工具,它不能处理所有客户的 GCC 扩展。

于 2009-07-22T13:03:53.650 回答
0

如果您想提高性能,原子内置函数是有意义的。内置函数允许您最大限度地减少由互斥体序列化引起的争用。当您使用互斥锁并创建关键会话时,您可以序列化对代码的该部分的访问;在性能代码中,您可能希望通过使用特定于线程的数据来避免争用,并且在不可能的情况下使用原子。最后一种情况是锁定,在锁定时,尽量减少持有锁的时间(使用消息传递和双重检查锁定,尽管有些人声称它不起作用——对我有用)。

于 2010-09-29T14:56:23.667 回答