Я знаю, что эта вилка создает новый процесс, но как насчет потока, который выполнялся до вызова fork, также он изменяется (потому что теперь он является частью нового процесса «дочерний процесс», который должен иметь новые потоки?)Изменяется ли идентификатор потока после разветвления нового процесса?
Компиляция и запуск следующего теста C подтверждает, что идентификатор потока остается прежний:
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");
}
Может кто-нибудь объяснить мне, почему поток распределяется между родительским и дочерним процессом?
Идентификаторы потоков являются * непрозрачными * данными, вы не должны использовать их прямое сравнение. Вместо этого используйте ['pthread_equal'] (http://man7.org/linux/man-pages/man3/pthread_equal.3.html). –
Используйте gettid(), а не непрозрачную структуру pthread_t. – Claudio
Да, я просто сравниваю и печатаю результат сравнения идентификатора потока перед форсированием и в дочернем процессе. – Bionix1441