【问题标题】:GCC Atomic Builtins instead of pthread?GCC Atomic Builtins 而不是 pthread?
【发布时间】:2010-11-12 13:57:49
【问题描述】:

我找到了以下文章:Use GCC-provided atomic lock operations to replace pthread_mutex_lock functions

指的是GCC Atomic Builtins

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

这是个好主意吗?

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

【问题讨论】:

    标签: c multithreading gcc parallel-processing lock-free


    【解决方案1】:

    这是个好主意吗?

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

    【讨论】:

    • pthreads 没有问题,只是想知道切换到那些 GCC 内置函数是否值得。我将始终使用 GCC 进行编译,没有机会改变这一点。
    • “如果没坏,就不要修”是我的座右铭。
    • 这些内置函数由英特尔定义,如页面所述;我希望他们也可以在其他编译器上工作。
    • 包括非英特尔处理器的?
    【解决方案2】:

    如果您已经在使用 pthread,并且 pthread 锁定功能已经做了您想要的,那么最好使用 pthread 锁定功能。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-01-18
          • 2014-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-25
          • 2016-02-09
          • 2015-01-18
          • 2015-11-29
          相关资源
          最近更新 更多