我知道这是一个非常具体的问题,对于高级程序员来说它并不是很有趣,但我想知道什么时候准确分配了一个线程函数的局部变量,换句话说,之后
pthread_create(&thread, &function, ...)
执行,我可以说它们是否存在于内存中(考虑到调度程序尚未执行该线程)?
我试图在posix库代码中搜索但是它不容易理解,我到达clone
函数,用汇编编写,但是我找不到系统调用服务例程的代码{{ 1}}了解它究竟是做什么的。我在sys_clone
代码中看到了线程函数的调用,但我认为这应该仅在创建的线程中发生(当pthread_create终止时,调度程序可能从未执行过)而不是在创建者中。
答案 0 :(得分:3)
换句话说
之后执行pthread_create(&thread, &function, ...)
,我可以说它们是否存在于内存中(考虑到 调度程序可能还没有执行该线程?)
POSIX没有任何理由相信在创建的线程中初始调用函数function()
的局部变量将在pthread_create()
返回时分配。它们可能已经或可能没有,事实上,答案可能甚至没有很好地定义,因为不同的线程不一定具有一致的机器状态视图。
线程的启动函数的局部变量相对于该线程中调用的任何其他函数的局部变量没有特别的意义。此外,尽管pthread_create()
在创建新线程之前不会成功返回,但这是一个单独的问题,即是否已经输入了启动函数,更不用说是否已经分配了它的局部变量。