pthread_create 传递数组
时间: 2023-08-15 22:14:50 浏览: 204
给Thread线程传递数据
您可以通过传递指向数组的指针来在pthread_create函数中传递数组。这样做可以确保线程访问相同的数组,并对其进行读取或写入操作。
首先,您需要定义一个结构体,其中包含一个指向数组的指针和其他线程需要的任何其他参数。例如:
```c
#include <stdio.h>
#include <pthread.h>
#define ARRAY_SIZE 10
// 定义结构体
typedef struct {
int* array;
int size;
// 可以添加其他参数
} ThreadData;
// 线程函数
void* threadFunction(void* arg) {
ThreadData* data = (ThreadData*)arg;
int* array = data->array;
int size = data->size;
// 在这里进行对数组的操作
for (int i = 0; i < size; i++) {
printf("Thread: array[%d] = %d\n", i, array[i]);
}
pthread_exit(NULL);
}
int main() {
pthread_t tid;
int array[ARRAY_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 创建结构体并设置参数
ThreadData data;
data.array = array;
data.size = ARRAY_SIZE;
// 创建线程并传递结构体
pthread_create(&tid, NULL, threadFunction, (void*)&data);
// 等待线程结束
pthread_join(tid, NULL);
return 0;
}
```
在上面的例子中,我们首先定义了一个ThreadData结构体,其中包含一个指向数组的指针和数组的大小。然后,在主函数中创建了一个数组,并将其传递给ThreadData结构体的array成员。接下来,我们通过pthread_create函数创建了一个线程,并将threadFunction作为线程函数传递进去。在线程函数中,我们通过ThreadData结构体的指针访问了数组,并进行了一些操作。
请注意,线程函数中对数组的访问是安全的,因为数组是在主线程中创建的,并且在线程结束之前,主线程不会对其进行修改。但是,如果在主线程修改数组时需要保护访问,您可能需要使用互斥锁或其他线程同步机制来确保线程安全性。
阅读全文