4.1.1 向线程传递数据
我们可以定义一个结构体里面有向线程传递的参数。使用这种结构体创建变量,并在创建线程时将它的地址作为参数传入。
如下是一个例子,
Listing 4.2 (thread-create2) Create Two Thread
s#include <pthread.h>
#include <stdio.h>
/*Parameters to print_function*/
typedef struct print_param
{
char data;//which to print
int times;//How many times to print
} print_param;
void * char_print(void* pargv)
{
print_param* p = ( print_param*)pargv;
int i = 0;
for(i = 0; i<p->times ; i++)
{
fputc(p->data,stderr);
}
return NULL;
}
int main(void)
{
pthread_t thrd1_id,
thrd2_id;
print_param param1 = {
.data = 'X',
.times = 30
},
param2 = {
.data = 'Y',
.times = 20
};
pthread_create(&thrd1_id, NULL, &char_print, ¶m1);
pthread_create(&thrd2_id, NULL, &char_print, ¶m2);
return 0;
}
实际上这个例子是有毛病的,因为主线程在创建了两个子线程后可能退出,这样它的局部变量将被释放,从而传入子线程的指针将会失效。
4.1.2 Joining Threads
我们可以在main中等待子线程结束后才退出。可以使用 pthread_join(pid_to_wait,return_value);
在上一个例子中return o;上面 加入
pthread_join(thrd1_id,NULL);
pthread_join(thrd2_id,NULL);
即可达到目的。