linux系统下C语言全局变量数组数据,线程安全拷贝示例
时间: 2024-10-19 12:03:08 浏览: 30
在Linux下的C语言中,全局变量数组的数据如果需要在多个线程间共享并且保证线程安全,通常需要采取锁机制来同步访问。这里提供一个简单的例子,我们将使用互斥锁(mutex)来进行线程安全的拷贝操作:
```c
#include <pthread.h>
#include <stdlib.h>
// 全局数组
static int global_array[100];
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 初始化互斥锁
void *copy_array(void *arg) {
int *local_array = malloc(sizeof(int) * 100); // 本地数组
if (local_array == NULL) {
perror("Memory allocation failed");
return NULL;
}
pthread_mutex_lock(&mutex); // 获取锁
for (int i = 0; i < 100; i++) {
local_array[i] = global_array[i]; // 线程安全复制
}
pthread_mutex_unlock(&mutex); // 释放锁
// 使用local_array完成任务...
free(local_array);
return NULL;
}
int main() {
pthread_t thread_id;
// 创建并启动线程
pthread_create(&thread_id, NULL, copy_array, NULL);
// 在主线程中继续做其他事情...
pthread_join(thread_id, NULL); // 等待线程结束
return 0;
}
```
在这个例子中,`copy_array`函数负责线程安全地复制全局数组到本地数组。通过在访问全局数组之前获取锁(`pthread_mutex_lock`)和完成后释放锁(`pthread_mutex_unlock`),我们确保了在同一时间只有一个线程能访问全局数组。
阅读全文