【发布时间】:2017-06-05 05:12:41
【问题描述】:
我知道这个 fork 创建了一个新进程,但是在调用 fork 之前正在运行的线程呢,它是否也发生了变化(因为现在它是应该有新线程的新进程“子进程”的一部分? )
编译并运行以下 C 测试确认线程 id 保持不变:
pthread_t threadId1, threadId2;
threadId1 = pthread_self();
if (fork() == 0)
{
threadId2 = pthread_self();
if (pthread_equal(threadId1,threadId2)) // edited
{
printf("we are in the same thread \n");
}
else
{
printf("we are on different threads \n");
}
有人能解释一下为什么线程是在父子进程之间共享的吗?
【问题讨论】:
-
线程ID是不透明数据,你不应该直接比较它们。而是使用
pthread_equal。 -
使用 gettid() 而不是不透明的 pthread_t 结构。
-
是的,我只是在fork之前和子进程中比较和打印线程id的比较结果。
-
我不确定,但也许线程绑定到父进程并且它们的 id 仅在其中是唯一的。因此,您可以获得相同的 id。
-
此外,POSIX 标准声称将线程与 '==' 进行比较是不合适的方式。你必须使用 pthread_equal。
标签: c multithreading pthreads fork