【发布时间】:2010-12-04 12:20:23
【问题描述】:
我听说执行“global_variable += individual_thread_data”是线程不安全的;例如[没有锁]。
但是如果一个线程只在每个线程中执行“global_variable = individual_thread_data”,它是线程安全的吗?
【问题讨论】:
标签: multithreading thread-safety pthreads global-variables
我听说执行“global_variable += individual_thread_data”是线程不安全的;例如[没有锁]。
但是如果一个线程只在每个线程中执行“global_variable = individual_thread_data”,它是线程安全的吗?
【问题讨论】:
标签: multithreading thread-safety pthreads global-variables
不考虑变量类型,就不是线程安全的。您应该使用互斥锁/临界区或原子变量。
有时编写一个简单的代码来分配几种类型的变量并将其反汇编以查看如何分配它很有用。
另外,对于cas-supporting architecture,您可以使用汇编代码来模拟原子变量。
(另一个提示:如果在线程中使用该变量应声明为volatile,以防止编译器进行优化。)
【讨论】:
volatile。 pthread_mutex_lock() 和 pthread_mutex_unlock() 必须充当编译器屏障。
不,这同样不安全(另一个线程可能同时使用该变量)。
【讨论】: