其实简单的说就是在线程函数头加上 pthread_detach(pthread_self())的话,线程状态改变,在函数尾部直接pthread_exit线程就会自动退出。省去了给线程擦屁股的麻烦 eg: pthread_t tid; int status = pthread_create(&tid, NULL, ThreadFunc, NULL); if(status != 0) { perror("pthread_create error"); } p...
其实简单的说就是在线程函数头加上 pthread_detach(pthread_self())的话,线程状态改变,在函数尾部直接pthread_exit线程就会自动退出。省去了给线程擦屁股的麻烦 eg: pthread_t tid; int status = pthread_create(&tid, NULL, ThreadFunc, NULL); if(status != 0) { perror("pthread_create error"); } p...
摘自http://kb.cnblogs.com/a/1285801/ 其实简单的说就是在线程函数头加上 pthread_detach(pthread_self())的话,线程状态改变,在函数尾部直接 pthread_exit线程就会自动退出。省去了给线程擦屁股的麻烦
pthread_detach函数把指定的线程转变为脱离状态。 #include <pthread.h> int pthread_detach(pthread_t thread); // 返回:若成功返回0,否则返回错误编号 本函数通常由想让自己脱离的线程使用,就如以下语句: pthread_detach(pthread_self()); ⑤ 线程ID获取(pthread_self) #include <pthread.h> pthread_t pthrea...
这就视情况而定了,因为如果主线程使用 pthread_join,主线程会阻塞,难以做到和子线程共同工作。所以,这里将线程函数设置为 detached。方法很简单,就是调用pthread_detach函数。将上面 demo 线程函数中的 pthread_detach 函数解注释,再编译执行,发现程序使用内存不再随着创建线程次数增加了。
还有一种方法是线程创建后在线程中调用 pthread_detach, 如:pthread_detach(pthread_self()),将状态改为unjoinable状态,确保资源的释放。 voidThreadFunc(void*ptr){pthread_detach(pthread_self());pthread_exit(0);}pthread_t tid;intstatus=pthread_create(&tid,NULL,ThreadFunc,NULL);if(status!=0){perror...
我们可以通过pthread_self函数获取线程 id,类似于 getpid 获取当前进程ID: pthread_t pthread_self(void); 下面代码中在每一个新线程被创建后,主线程都将通过输出型参数获取到的线程ID进行打印,此后主线程和新线程又通过调用 pthread_self 函数获取线程ID进行打印: ...
一个线程可以调用pthread_cancel来终止同一个进程中的另一个线程。 return pthread_exit pthread_cancel 5.分离线程——pthread_detach 线程是可以等待的,等待的时候是join的等待(阻塞式等待)。如果我们不想等待:不去等待线程,而是进行分离线程处理。默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行pthrea...
int pthread_detach(pthread_t thread); 2.示例 (1)pthread_ detach(pthread_ self()); 新线程自我分离。 如果没有sleep(1),就会出现新线程一直循环的情况。因为有可能主线程先执行 int n = pthread_ join(tid1, nullptr); 此时新线程还没有pthread_ detach分离,则主线程会一直阻塞在pthread_ join这里,不...
pthread_t pthread_self(void);:用于获取调用线程的线程标识符。 int pthread_detach(pthread_t thread);:用于将线程分离,使得线程在终止时自动释放其所有资源。 线程取消与比较: int pthread_cancel(pthread_t thread);:用于请求取消指定的线程。 int pthread_equal(pthread_t t1, pthread_t t2);:用于比较两个...