C:我需要取消我使用完的线程吗?

  • 本文关键字:线程 取消 c pthreads
  • 更新时间 :
  • 英文 :


我在C中创建一个线程,在运行时检查网页上的东西。我应该关闭这个线程,或者一旦它完成执行将自动处理?

--> Imports
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
--> Start thread 
pthread_t thread_id;
pthread_create(&thread_id, NULL, threadFunction, NULL);

---> Thread function
void *threadFunction(void *vargp) { 
//Do something...

return NULL;
}

您不需要考虑使用pthread_cancel,除非目标是提前结束正在运行的线程的执行。

在大多数情况下,您只是希望线程完成其工作。您通常通过使用pthread_join与线程连接来检测线程是否已经完成。

如果你正在创建一个不期望结束的线程,或者它什么时候结束并不重要,你可以创建一个分离的线程,或者在创建后使用pthread_detach分离它。那么,线程是不可连接的。

您的示例代码在NULL中传递线程属性,这导致pthread_create使用默认属性。你应该检查你的系统,但是Linux默认会创建可接合的线程。

对于大多数初学者项目,最简单的方法可能是创建可接合的线程,并在生成所有线程后让主线程调用pthread_exit。这将等待每个派生线程在程序终止之前完成执行。

否则,如果主线程需要在线程完成后执行汇总工作,它将在每个线程上等待pthread_join,直到所有线程都返回。在最后一个线程返回后,主线程可以做它需要做的事情,然后退出。

pthread的文档是这样说的:

线程以arg作为唯一参数执行start_routine创建。如果start_routine返回,效果就好像使用start_routine的返回值作为退出状态隐式调用pthread_exit()。请注意,最初调用main()的线程与此不同。当它从main()返回时,效果应该像使用main()的返回值作为退出状态隐式调用exit()一样。

因此不需要显式地终止线程。

最新更新