线程入口点方法/功能的目的是什么?

时间:2018-01-16 23:28:40

标签: multithreading pthreads posix

创建线程时我们传递入口点方法/函数,为什么我应该使用这个方法,它的目的是什么?

2 个答案:

答案 0 :(得分:1)

操作系统需要知道新的执行线程的起始位置。当使用高级编程语言时,不会在内存中指定要在新线程的上下文中执行的机器指令的地址,而是使用在语言中定义的执行单元,如函数或方法。如果线程创建像fork一样工作并且在fork调用点开始执行新线程,那么两个线程将具有通常驻留在堆栈中的相同局部变量。即使存在为新线程创建的堆栈副本,两个线程也会在离开作用域时运行相同的清理代码(例如,在C ++中,智能指针将被释放两次)。因此,当您为新线程指定起点时,您确定它将分配自己的堆栈帧,并且函数的epilog不会被执行两次。

答案 1 :(得分:0)

线程必须从某个地方开始。 pthread接口要求您提供表单

的功能
void *start_thread( void *arg );
使用

void *是因为它们可以引用任何内容。

创建线程时,要提供的函数称为线程的起点。可以把它想象成线程的main(),但是使用不同的参数和返回类型。