线程入口点 method/function 的目的是什么?
What is the purpose of the thread entry point method/function?
创建线程时我们传递一个入口点method/function,为什么要有这个方法,它的作用是什么?
线程必须从某个地方开始。 pthread 接口要求您提供形式为
的函数
void *start_thread( void *arg );
使用 void *
是因为它们可以指代任何东西。
创建线程时,调用提供的函数作为线程的起点。可以将其视为线程的 main()
,但具有不同的参数和 return 类型。
OS 需要知道新的执行线程从哪里开始。在使用高级编程语言时,并不指定要在新线程上下文中执行的机器指令在内存中的地址,而是使用语言中定义的函数或方法等执行单元。如果线程创建像 fork
一样工作并且新线程的执行在 fork
调用点开始,那么两个线程将具有通常驻留在堆栈中的相同局部变量。即使有为新线程创建的堆栈副本,两个线程在离开范围时也会 运行 相同的清理代码(例如,在 C++ 中,智能指针将被释放两次)。因此,当您为新线程指定起点时,您确定它会分配自己的堆栈帧,并且函数的结尾不会执行两次。
创建线程时我们传递一个入口点method/function,为什么要有这个方法,它的作用是什么?
线程必须从某个地方开始。 pthread 接口要求您提供形式为
的函数void *start_thread( void *arg );
使用 void *
是因为它们可以指代任何东西。
创建线程时,调用提供的函数作为线程的起点。可以将其视为线程的 main()
,但具有不同的参数和 return 类型。
OS 需要知道新的执行线程从哪里开始。在使用高级编程语言时,并不指定要在新线程上下文中执行的机器指令在内存中的地址,而是使用语言中定义的函数或方法等执行单元。如果线程创建像 fork
一样工作并且新线程的执行在 fork
调用点开始,那么两个线程将具有通常驻留在堆栈中的相同局部变量。即使有为新线程创建的堆栈副本,两个线程在离开范围时也会 运行 相同的清理代码(例如,在 C++ 中,智能指针将被释放两次)。因此,当您为新线程指定起点时,您确定它会分配自己的堆栈帧,并且函数的结尾不会执行两次。