c - 为什么 pthread_create 函数将线程函数名作为参数而不是调用它?

标签 c

在我的程序中,对 pthread_create 的调用如下所示:

res = pthread_create(&a_thread, NULL, thread_fn, (void*)n);

我的问题是,为什么我们不能做到:

res = pthread_create(&a_thread, NULL, thread_fn( (void*)n) );

因为这将减少pthread_create 中的参数数量并且看起来也合乎逻辑,至于一个函数我只学到了 3 件事:声明、定义和调用。

将函数名称作为参数传递并将其参数作为单独的参数传递是我不明白的事情。

如果此格式背后有任何逻辑,请解释。

最佳答案

最明显的论点是您不能将 thread_fn“作为参数”调用,因为那样它需要在之前pthread_create 运行完成> 可以被调用——也就是说,您将在当前线程中运行指定给新线程的代码。

另一种看待事物的方式是,创建执行线程必然会利用操作系统(内核)代码;在新线程变得有效可用之前,操作系统需要设置其内部簿记结构。由 pthread_create 引起的内核调用需要知道要在线程中执行的代码的内存地址,以便它可以在设置好所有内容并传递 后将控制转移到该位置函数的地址(与其返回值相对)是用第一种语法完成的。

关于c - 为什么 pthread_create 函数将线程函数名作为参数而不是调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580411/

相关文章:

c - 为什么我的代码不返回任何东西?

c - If .. else number is smaller than, unreachable 代码

c - 如何接受来自标准输入的路径名以进行 open() 系统调用?

c++ - 调用 XCreateWindow() 时产生 GLX 错误的 XLib

c - turbo c 中的 gotoxy 函数

在 shell 中自定义完成

c - 如何返回指向结构数组内元素的指针?

在 C 中正确实现链表

c - 如果使用 INADDR_ANY 加入 mcast 组,内核如何选择 IP 地址?

c - 为什么我丢失了变量 n2 的值?