gpt4 book ai didi

c - 为什么使用 pthread_exit?

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:49 24 4
gpt4 key购买 nike

我正在尝试使用此示例代码找出 pthread_exit 的用法:

void* PrintVar(void* arg)
{
int * a = (int *) arg; // we can access memory of a!!!
printf( "%d\n", *a);
}

int main(int argc, char*argv[])
{
int a, rc;
a = 10;
pthread_t thr;
pthread_create( &thr, NULL, PrintVar, &a );

//why do I need it here?//
pthread_exit(&rc); /* process continues until last
threads termintates */

有两件事我不太确定:

  1. 当我们使用 pthread_create 时 - 我正在传递“a”参数的地址,但是这个参数是否被“保存”在 PrintVar 函数的“arg”下?例如,如果我使用的是:PrintVar(void *blabla),并且想从主函数传递 2 个参数:int a = 10, int b= 20 .. 如何我可以这样做吗?

  2. 为什么需要 pthread_exit?这意味着 - 等待进程结束 - 但如果我不使用该行,我会遇到什么情况?

非常感谢!

最佳答案

  1. when we are using pthread_create - I'm passing 'a' parameter's address, but is this paramter being "saved" under "arg" of the PrintVar function?

“原创”a (在 main 中定义的那个)没有被复制,您只是传递一个指向它的指针。

for example if I was using : PrintVar(void *blabla) , and wanted to pass 2 parameters from main function : int a = 10, int b= 20 .. how can I do that?

将这两个值放在 struct 中并将指向此类结构的指针作为参数传递给 pthread_create (因此,PrintVar 将收到这样一个指针,并将能够检索这两个值)。

and my second question is why the pthread_exit needed? it means - wait for proccess to end - but what scenario can I get if I won't use that line?

pthread_exit如果其他线程仍在运行,则终止当前线程而不终止进程;从 main 返回, 相反,相当于调用 exit就标准而言,它应该“终止程序”(从而隐式地杀死所有线程)。

现在,作为 C 标准线程不可知(直到 C11)和对各种 Unix 中线程的支持是一个相对较新的添加,取决于 libc/kernel/whatever 版本 exit可能会也可能不会只杀死当前线程或所有线程。

仍然,在当前版本的 libc 中,exit (并因此从 main 返回)应该终止进程(以及它的所有线程),实际上使用系统调用 exit_group在 Linux 上。

注意 similar discussion适用于Windows CRT。

关于c - 为什么使用 pthread_exit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16399631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com