我有 2 个线程和一个共享的float
全局线程。一个线程只写入变量,而另一个只读取变量,我是否需要锁定对该变量的访问?换句话说:
volatile float x;
void reader_thread() {
while (1) {
// Grab mutex here?
float local_x = x;
// Release mutex?
do_stuff_with_value(local_x);
}
}
void writer_thread() {
while (1) {
float local_x = get_new_value_from_somewhere();
// Grab mutex here?
x = local_x;
// Release mutex?
}
}
我主要担心的是加载或存储不是原子的float
,这样最终会得到一个虚假的、部分更新的值。local_x
reader_thread
- 这是一个有效的担忧吗?
- 有没有另一种方法来保证没有互斥锁的原子性?
sig_atomic_t
假设它有足够的位用于我的目的,是否可以用作共享变量?
有问题的语言是使用 pthreads 的 C。