-2

我正在用 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;
}
4

2 回答 2

2

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

在大多数情况下,您只是希望线程完成其工作。您通常使用 . 加入线程来检测线程已完成pthread_join

如果您正在创建一个预计不会结束的线程,或者它何时结束并不重要,您可以创建一个分离的线程,或者在创建后使用pthread_detach. 然后,线程不可连接。

您的示例代码传入NULL线程属性,这会导致pthread_create使用默认属性。您应该检查您的系统,但默认情况下 Linux 会创建可连接线程。

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

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

于 2021-09-20T19:51:27.347 回答
1

pthread 的文档是这样说的:

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

所以不需要显式终止线程。

于 2021-09-20T19:30:34.753 回答