首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

多线程设置分离线程的有关问题

2012-02-07 
多线程设置分离线程的问题程序如下#includepthread.h#include iostream#include fstreamusing names

多线程设置分离线程的问题
程序如下
#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就能看到所有的打印信息

热点排行