首页 > 代码库 > 线程间的參数传递
线程间的參数传递
在多线程编程中。经常须要从主线程传递參数给子线程或在主线程中获得子线程的计算结果,
若使用全局变量实现。必定须要对临界区保护,因此导致大量的切换工作造成效率的低下。
而利用进程间的參数传递能够解决这一问题。
两个方向的參数传递:
1.主线程向子线程传递參数:
通过函数 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
在创建线程时。利用參数arg传递參数给子线程.
2.子线程向主线程传递參数:
通过函数 int pthread_join(pthread_t thread, void **retval);
主线程等待子线程结束,从參数retval读取子线程的返回值.
在须要传递多个简单结构參数的时候,通常将线程间传递的參数定义为一个结构体。
以下是一个简单的样例:
#include <stdio.h> #include <stdlib.h> typedef struct data//线程间传递的參数结构 { long *a; long *b; } data; void *thread_handle (void *args)//线程处理函数 { data *rev = (data *) args; data *ret = (data *) malloc (sizeof (data)); ret->a = (long *) malloc (sizeof (long)); ret->b = (long *) malloc (sizeof (long)); *(ret->a) = 2 *(* (rev->a)); *(ret->b) = 2 *(* (rev->b)); return (void *) ret; } int main () { pthread_t pid; void *ret; data *tmp = (data *) malloc (sizeof (data)); tmp->a = (long *) malloc (sizeof (long)); tmp->b = (long *) malloc (sizeof (long)); *(tmp->a) = 5; *(tmp->b) = 6; pthread_create (&pid, NULL, thread_handle, (void *) tmp); pthread_join (pid, &ret); printf ("a=%ld\n", *(((data *) ret)->a)); printf ("b=%ld\n", *(((data *) ret)->b)); }
上述程序利用子线程将主线程传递来的參数各自乘2后返回,主线程接收返回结果并输出
如果源文件为test.c。运行
gcc test.c -lpthread
./a.out
就可以
线程间的參数传递
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。