多线程设置分离线程的问题
程序如下
#include<pthread.h>
#include <iostream>
#include <fstream>
using namespace std;
void* func(void *arg)
{
for(int i =0 ; i<5; i++)
cout << "--"<<i << endl;
pthread_exit(NULL);
return 0;
}
int
main(int argc, char **argv)
{
pthread_t threads[10];
pthread_attr_t tattr;
pthread_attr_init(&tattr);
void *arg;
//pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
//int ret = pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE);
int ret = pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_DETACHED);
cout << ret << endl;
for(int i=0; i < 10; ++i)
pthread_create(&threads[i], &tattr, func, arg);
/*
for(int i=0; i < 10; ++i)
pthread_join(threads[i],NULL);
*/
return 0;
}
为什么只要我设置了PTHREAD_CREATE_DETACHED以后,pthread_create()不能调用我的函数了呢?
[解决办法]
我不清楚 帮顶+等答案
[解决办法]
linux不懂的飘过~~
[解决办法]
分离状态的函数为 pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)。第二个参数可选为PTHREAD_CREATE_DETACHED(分离线程)和 PTHREAD _CREATE_JOINABLE(非分离线程)。这里要注意的一点是,如果设置一个线程为分离线程,而这个线程运行又非常快,它很可能在 pthread_create函数返回之前就终止了,它终止以后就可能将线程号和系统资源移交给其他的线程使用,这样调用pthread_create的线程就得到了错误的线程号。要避免这种情况可以采取一定的同步措施,最简单的方法之一是可以在被创建的线程里调用 pthread_cond_timewait函数,让这个线程等待一会儿,留出足够的时间让函数pthread_create返回。设置一段等待时间,是在多线程编程里常用的方法。
[解决办法]
楼主的程序设置PTHREAD_CREATE_DETACHED后并不是不能调用func而是你的主循环结束太快了,只要在return 0; 前面加上一个适当的sleep就能看到所有的打印信息