【问题标题】:Is it thread safe to change a variable with no calculation of previous data involved?在不计算先前数据的情况下更改变量是否是线程安全的?
【发布时间】:2010-12-04 12:20:23
【问题描述】:

我听说执行“global_variable += individual_thread_data”是线程不安全的;例如[没有锁]。

但是如果一个线程只在每个线程中执行“global_variable = individual_thread_data”,它是线程安全的吗?

【问题讨论】:

    标签: multithreading thread-safety pthreads global-variables


    【解决方案1】:

    不考虑变量类型,就不是线程安全的。您应该使用互斥锁/临界区或原子变量。

    有时编写一个简单的代码来分配几种类型的变量并将其反汇编以查看如何分配它很有用。

    另外,对于cas-supporting architecture,您可以使用汇编代码来模拟原子变量。

    (另一个提示:如果在线程中使用该变量应声明为volatile,以防止编译器进行优化。)

    【讨论】:

    • 好的,我在全局变量周围放置了一个互斥代码(pthreads)。我猜应该够了。感谢您提供 ['volatile'] 的提示,我想这应该是互斥变量的常见做法。
    • 不,如果您使用互斥锁,则不需要使用volatilepthread_mutex_lock()pthread_mutex_unlock() 必须充当编译器屏障。
    【解决方案2】:

    ,这同样不安全(另一个线程可能同时使用该变量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多