【问题标题】:Access static constant variable from multiple threads in C从C中的多个线程访问静态常量变量
【发布时间】:2010-05-17 09:33:49
【问题描述】:

我对 Linux 下的多线程编程(C/C++ 和 POSIX 线程)有一些经验,但是最明显的情况有时非常复杂。

我的代码中有几个静态常量变量(全局变量和函数局部变量),我可以在不使用互斥体的情况下从多个线程同时访问它们吗?因为我不修改它们应该没问题,但最好还是问问。

我必须进行高速优化,因此即使像互斥锁/解锁这样的快速操作对我来说也相当昂贵,尤其是因为我的应用程序将通过长循环访问这些变量。

【问题讨论】:

标签: c++ c pthreads


【解决方案1】:

如果您只在一个线程上初始化它们,然后从不修改它们,则应该可以从多个线程同时读取它们而无需互斥锁等。

【讨论】:

  • +1,如果答案不够明显:第一次调用具有常量静态变量的函数不是线程安全的。
  • @David:事实上,大多数编译器都使用双重检查锁定并同步函数范围静态变量的初始化。例如,使用 gcc 是完全安全的。
【解决方案2】:

如果您只是阅读而不是修改,则不需要任何锁

【讨论】:

    【解决方案3】:

    我不知道其他架构,但英特尔保证所有读取都是原子的,但是,如果您确实想添加一些,请使用 value = atomic_add(&variable,0); 之类的东西,这将强制所有写入,然后将值加 0返回旧值,不会改变

    【讨论】:

    • 很高兴知道,所有读取都是原子的,你能给我这个信息的来源吗?
    猜你喜欢
    • 1970-01-01
    • 2013-08-31
    • 2011-06-03
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多