多线程如何才能等待任务执行完成才停止?
的有关信息介绍如下:可以手动设置线程退出的时机。通过 int pthread_setcanceltype(int type, int *oldtype)设置本线程取消动作的执行时机,type由两种取值:PTHREAD_CANCEL_DEFFERED和 PTHREAD_CANCEL_ASYNCHRONOUS,仅当Cancel状态为Enable时有效,分别表示收到信号后继续运行至下一个取消点再退出和 立即执行取消动作(退出);oldtype如果不为NULL则存入运来的取消动作类型值。此函数应该在线程开始时执行,若线程内部有任何资源申请等操作,应该选择 PTHREAD_CANCEL_DEFFERED 的设定,然后在退出
我大致理解你的运用场景了。一般通用的做法是这样的:在新线程的入口程序里面通常会有如下代码段:while(sys_state != SYS_SHUT_DOWN){ if(hasJobs()) { //here process you jobs } else { sleep(nnnnn);//等着任务的到来 }}接下来的代码就是函数返回及线程退出之前的资源回收了一般都不会主动使用thread_cancel来结束线程。线程执行的代码段结束了,它自己会退出的,你只需要考虑什么时候让它的代码段结束就行了。
回复 7# korpus 先说说你代码里存在的问题:int main(){ pthread_t t; pthread_attr_t at; int ret, i; for(i = 0; i < 2;i++) { ret = pthread_create(&t ,NULL,thread,&i); if(ret!=0) { printf ("Create pthread error!n"); exit (1); }printf("%ldn", t); } while(1){// pthread_cancel(t); //10???,???????. t??????// pthread_
现在想的是,如果自己在做任务,然后就去注册一下。感觉麻烦,pthread_cancel能解决吗
我还没碰到过要用 pthread_cancel 的场合。这函数设计出来算一种bug吗?