在线程中传递参数使用结构体或全局变量
时间: 2023-12-30 12:06:29 浏览: 78
易语言-易语言多线程传递多参数
是的,结构体和全局变量是在线程中传递参数的两种常用方式。举个例子:
1. 使用结构体传递参数
```
// 定义一个结构体,用于传递参数
typedef struct {
int x;
int y;
} Params;
// 定义一个全局变量,保存结果
int result;
// 定义线程函数,接收一个 Params 结构体指针作为参数
void *thread_func(void *arg) {
Params *params = (Params *)arg;
result = params->x + params->y;
pthread_exit(NULL);
}
int main() {
Params params = {100, 200};
pthread_t tid;
// 创建线程,将 params 指针作为参数传递给线程函数
pthread_create(&tid, NULL, thread_func, ¶ms);
// 等待线程结束
pthread_join(tid, NULL);
// 输出结果
printf("result = %d\n", result);
return 0;
}
```
2. 使用全局变量传递参数
```
// 定义全局变量,保存参数和结果
int x = 100;
int y = 200;
int result;
// 定义线程函数,无参数
void *thread_func(void *arg) {
result = x + y;
pthread_exit(NULL);
}
int main() {
pthread_t tid;
// 创建线程
pthread_create(&tid, NULL, thread_func, NULL);
// 等待线程结束
pthread_join(tid, NULL);
// 输出结果
printf("result = %d\n", result);
return 0;
}
```
这两种方式都可以在线程中传递参数,但全局变量的方式可能会产生线程安全问题,需要注意多线程访问全局变量时的同步问题。
阅读全文