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

linux下的c++,线程有类似于进程wait的函数么?
线程A建立线程B、C,线程B sleep(30),线程C sleep(35),但是线程C可能被别的线程提前结束。要求线程A阻塞,直到B或者C结束,并且能判断出到底是B还是C结束了。

对于进程来说很容易实现,只要fork两次,让父进程wait(NULL)就可以了。其他进程可以通过kill来结束C,wait函数会返回结束的pid号码。

我的问题就是线程需要实现同样的功能,需要怎么做?其实是两个问题:
1.如何结束其他线程?(实现类似于kill的功能)
2.如何阻塞主线程,并且判断到底是B还是C线程结束了?(实现类似于wait(NULL)的功能)

求达人解惑


------解决方案--------------------
pthread_cond_wait, pthread_cond_timedwait, pthread_cond_reltimedwait_np– wait on a condition

pthread_kill
The pthread_kill() function sends the sig signal to the thread designated by thread

------解决方案--------------------
阻塞A线程的方法:
在线程A里 
(1)用pthread_create创建B、C。
(2)用pthread_join等待B和C结束,然后判断是哪个线程结束。

其他还有很多pthread开头的函数,你自己搜索看看,是否有你所要的
------解决方案--------------------
pthread_join的第二个参数能返回所等待线程的结束状态的。若所等待线程是执行结束后返回的,pthread_join能得到返回码,若所等待线程是被取消掉的,pthread_join能得PTHREAD_CANCELED.