当前位置: 技术问答>linux和unix
关于线程返回值的问题
来源: 互联网 发布时间:2016-11-03
本文导语: #include #include #include void* task1(void*); void* task2(void*); int main() { pthread_t pid1, pid2; pthread_attr_t attr; int ret=0; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&pi...
#include
#include
#include
void* task1(void*);
void* task2(void*);
int main()
{
pthread_t pid1, pid2;
pthread_attr_t attr;
int ret=0;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pid1, &attr, task1, NULL);
ret=pthread_join(pid1, NULL);
printf("ret=%dn", ret);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&pid2, &attr, task2, NULL);
ret=pthread_join(pid2, NULL);
printf("ret=%dn", ret);
return 1;
}
void* task1(void *arg1)
{
printf("task1n");
pthread_exit( (void *)1);
}
void* task2(void *arg2)
{
printf("task2n");
pthread_exit((void *)2);
}
task1
ret=22
task2
ret=0
这段线程函数返回值,我很不理解。pid1是分离线程,我对分离线程概念不是很清楚,理解就是不需要pthread_join,那么这里返回ret=22是什么意思呢?而task2,是普通线程,我明明返回的是2,为何这里显示ret是0呢?
|
线程的分离状态决定一个线程以什么样的方式来终止自己。非分离状态,原有的线程等待创建的线程结束。
只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而分离线程不是
这样子的,它没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。程序员应该根
据自己的需要,选择适当的分离状态。
只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而分离线程不是
这样子的,它没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。程序员应该根
据自己的需要,选择适当的分离状态。
|
pthread_join的作用是使当前线程挂起,等待制定的线程结束。
如果成功返回0,
如果不成功则返回错误码,通过输出strerror(err),就知道是什么错误了
如果成功返回0,
如果不成功则返回错误码,通过输出strerror(err),就知道是什么错误了
|
pthread_join不是以线程的返回值作函数的返回值,而是象大多数unix函数一样返回0表示成功(其它值表示失败)。
void *p=NULL;
int ret=pthread_join(pid2, &p);
如果ret是0,那么p中就是pthread_exit((void *)2)指定的线程返回值2。
void *p=NULL;
int ret=pthread_join(pid2, &p);
如果ret是0,那么p中就是pthread_exit((void *)2)指定的线程返回值2。