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

Ama*_*ney 1 c

在我的程序中,调用pthread_create看起来像:

res = pthread_create(&a_thread, NULL, thread_fn, (void*)n);
Run Code Online (Sandbox Code Playgroud)

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

res = pthread_create(&a_thread, NULL, thread_fn( (void*)n) );
Run Code Online (Sandbox Code Playgroud)

因为这将减少参数的数量,pthread_create并且看起来也是合乎逻辑的,因为我只学习了3件事:声明,定义和调用.

将函数名称作为参数传递并添加到将其参数作为单独参数传递的内容是我不明白的事情.

如果这种格式背后有任何逻辑,请善解释.

Jon*_*Jon 8

最明显的论点是你不能称之为thread_fn"作为参数",因为它需要 pthread_create被调用之前运行完成- 也就是说,你将运行目标线程中新线程的代码.

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