2009-07-02 1 views
9

В системе linux процесс дочернего процесса просматривает существующие потоки так же, как и родительский процесс?вилка и существующие потоки?

int main() { 

    //create thread 1 

    int child_pid = fork(); 

    if (0 == child_pid) 
    { 
     .. 
    } 
    else 
    { 
     .. 
    } 

Поскольку все адресное пространство копируется для дочернего процесса, что происходит с состоянием потоков. Что делать, если поток 1 в указанном сегменте ожидает условного сигнала. Он также находится в состоянии ожидания в дочернем процессе?

ответ

0

Нитки не наследуются от дочернего процесса в системе linux с использованием fork(). Углубленный источник находится здесь: http://linas.org/linux/threads-faq.html

+2

Этот FAQ очень устарел. Самая большая разница между видимыми пользователями заключается в том, что LinuxThreads был устарел NPTL с момента появления ядра 2.6 и glibc 2.3, что устраняет все неполадки, возникающие при использовании потоков, не относящихся к POSIX. – ephemient

13

Темы на linux в настоящее время пытаются оставаться posix complient. Только вызывающий поток репликация, а не другие потоков (обратите внимание, что, например, на солярисе вы можете выбрать то, что вилка делает в зависимости от того, что библиотеки связывания)

От http://www.opengroup.org/onlinepubs/000095399/functions/fork.html:

Процесс должен быть создан с одиночный нить. Если многопоточный процесс вызывает fork(), новый процесс должен содержать реплику вызывающего потока и всего его адресного пространства, , возможно, включая состояния мьютексов и других ресурсов. Следовательно, во избежание ошибок дочерний процесс может выполнять только операции с асинхронным сигналом без использования до , так как вызывается одна из функций exec . Вилка могут быть установлены обработчиками функции pthread_atfork() в для поддержания приложения инвариантов для вызовов fork().

+1

Спасибо. Ссылка очень помогает. – Mac13

 Смежные вопросы

  • Нет связанных вопросов^_^