linux系统下C语言批量全局变量数据,线程安全拷贝示例
时间: 2024-10-19 16:03:08 浏览: 35
linux c语言函数速查手册
5星 · 资源好评率100%
在Linux系统下的C语言程序中,当需要在多个线程之间共享全局变量并保证数据的一致性和安全性时,你需要考虑线程同步机制,如互斥锁(mutex)或原子操作。下面是一个简单的例子,展示了如何使用`pthread_mutex_t`互斥锁来保护全局变量的数据:
```c
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
// 定义全局变量
typedef struct {
int shared_data;
} GlobalData;
GlobalData global_var;
// 互斥锁
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *thread_func(void *arg) {
pthread_mutex_lock(&mutex);
global_var.shared_data++;
printf("Thread %d modified shared data: %d\n", pthread_self(), global_var.shared_data);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t threads[2];
int i;
// 创建线程
for (i = 0; i < 2; ++i) {
if (pthread_create(&threads[i], NULL, thread_func, NULL)) {
perror("Failed to create thread");
exit(EXIT_FAILURE);
}
}
// 等待所有线程完成
for (i = 0; i < 2; ++i) {
pthread_join(threads[i], NULL);
}
printf("Final shared data: %d\n", global_var.shared_data);
return 0;
}
```
在这个例子中,我们创建了两个线程,它们都会尝试修改全局变量`shared_data`。但是通过`pthread_mutex_lock()`和`pthread_mutex_unlock()`,每次只有一个线程能获取到互斥锁并更新数据,防止数据冲突。
阅读全文