您的位置:首页 > 其它

pthread_join得到pthread_exit传出来的参数

2013-11-11 20:13 239 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

struct foo
{
int a,b,c,d;
}w;

void printfoo(const char *s, const struct foo *fp)
{
printf(s);
printf(" structure at 0x%x\n", (unsigned)fp);
printf(" foo.a = %d\n", fp->a);
printf(" foo.b = %d\n", fp->b);
printf(" foo.c = %d\n", fp->c);
printf(" foo.d = %d\n", fp->d);
}

void *thr_fn1(void *arg)
{
pthread_t  tid;
tid = pthread_self();
printf("thread 1: ID is %u\n", (unsigned int)tid);
printfoo("thread 1:\n", &w);
w.a = 500;
w.b = 600;
w.c = 700;
w.d = 800;
pthread_exit((void *)&w);
}

void *thr_fn2(void *arg)
{
pthread_t tid;
tid = pthread_self();
printf("thread 2: ID is %u\n", (unsigned int)tid);
pthread_exit((void *)0);
}

int main(void)
{
int err;
pthread_t tid1, tid2;
struct foo *fp;
w.a = 1; w.b = 2; w.c = 3; w.d = 4;

err = pthread_create(&tid1, NULL, thr_fn1, NULL);
if(err != 0)
printf("can't create thread 1: %s\n", strerror(err));
err = pthread_join(tid1, (void *)&fp);
if(err != 0)
printf("can't join with thread 1: %s\n", strerror(err));
sleep(1);
printf("parent starting second thread\n");
err = pthread_create(&tid2, NULL, thr_fn2, NULL);
if( err != 0)
printf("can't create thread 2: %s\n", strerror(err));
sleep(1);
printfoo("parent: \n", fp);
return 0;

}


运行结果:

[root@localhost one]# gcc pthread2.c -lpthread
[root@localhost one]# ./a.out
thread 1: ID is 3078536048
thread 1:
structure at 0x8049b94
foo.a = 1
foo.b = 2
foo.c = 3
foo.d = 4
parent starting second thread
thread 2: ID is 3078536048
parent:
structure at 0x8049b94
foo.a = 500
foo.b = 600
foo.c = 700
foo.d = 800
[root@localhost one]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: