在Linux中,如果你想要在多个线程之间共享一个变量,并且你想要确保一个线程写入而另一个线程读取时能够及时同步,你可以使用原子操作。
对于写入线程,你可以使用 atomic_store
来存储变量,对于读取线程,你可以使用 atomic_load
来加载变量。这些操作都是原子的,意味着它们在执行过程中不会被其他线程中断。
以下是一个简单的例子,展示了如何在两个线程之间使用原子变量进行同步:
#include <stdatomic.h>
#include <stdio.h>
#include <pthread.h>
atomic_int shared_var;
void* write_thread(void* arg) {
for (int i = 0; i < 10; ++i) {
atomic_store(&shared_var, i); // 原子存储操作
}
return NULL;
}
void* read_thread(void* arg) {
while (atomic_load(&shared_var) < 10) { // 原子加载操作
printf("shared_var: %d\n", atomic_load(&shared_var));
}
return NULL;
}
int main() {
pthread_t writer, reader;
pthread_create(&writer, NULL, &write_thread, NULL);
pthread_create(&reader, NULL, &read_thread, NULL);
pthread_join(writer, NULL);
pthread_join(reader, NULL);
return 0;
}