日期:2014-05-16  浏览次数:20801 次

线程的分离状态怎么理解?
关于pthread_join,我查过的资料都这样描述:pthread_join将阻塞调用线程,直到新建线程退出;可以通过pthread_join自动把线程置于分离状态,这样资源就可以恢复。

这里有两个问题搞不明白:
1、pthread_join将阻塞调用线程,可是我用了一个测试代码,不能证明这一点。线程的执行代码是:

C/C++ code

void* fun( void* arg )
{
        int i;
        for ( i = 0; i < 2; ++i )
        {
                printf( "%s\n", arg );
                sleep( 1 );
        }
}


在主程序中,启用两个线程,并分别使用pthread_join函数,向fun传递的参数分别是"thread 1" 和"thread 2",结果运行结果是:
thread 1
thread 2
thread 1
thread 2
从运行结果来看,调用线程并没有阻塞。

2、将线程置于分离状态是什么意思?
有一个函数是pthread_detach,它的介绍是:pthread_detach可以用于使线程进入分离状态。
那么它和pthread_join是什么关系?

我真是一点头绪都没有,请大家帮我解答一下,先谢谢各位了!

------解决方案--------------------
从结果你怎么看不出来阻塞了?阻塞的意思是 主线程会在调用pthread_join()处等待,直到子线程消亡了才会继续往下执行。
pthread_detach使子线程进入分离状态的意思是 主线程不能再用pthread_join()和子线程同步,就是说 对子线程调用 pthread_detach之后,主线程再调用pthread_join()不会导致等待主线程阻塞等待,这时候主线程和子线程相当于两个执行序列,两者之间处于一种 分离 状态。