现在的位置: 首页 > 综合 > 正文

4 线程 [2]

2013年01月09日 ⁄ 综合 ⁄ 共 1027字 ⁄ 字号 评论关闭

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, &param1);
pthread_create(&thrd2_id, NULL, &char_print, &param2);

 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);

即可达到目的。

抱歉!评论已关闭.