API-интерфейсы потоков Windows и Solaris позволяют создавать поток в «приостановленном» состоянии. Поток начинается только тогда, когда он «возобновляется». Я привык к потокам POSIX, которые не имеют этой концепции, и я изо всех сил пытаюсь понять ее мотивацию. Может ли кто-нибудь предположить, почему было бы полезно создать «приостановленный» поток?Зачем мне начинать тему «приостановлено»?
Вот простой иллюстративный пример. WinAPI позволяет мне это сделать:
t = CreateThread(NULL,0,func,NULL,CREATE_SUSPENDED,NULL);
// A. Thread not running, so do... something here?
ResumeThread(t);
// B. Thread running, so do something else.
The (проще) POSIX эквивалентно, как представляется:
// A. Thread not running, so do... something here?
pthread_create(&t,NULL,func,NULL);
// B. Thread running, so do something else.
Кто-нибудь есть какие-либо реальные примеры, где они были в состоянии сделать что-то в точке A (между CreateThread & ResumeThread), что было бы сложно в POSIX?
О, кстати, я понимаю, что использование CreateThread напрямую - это не то, что вы должны делать с C/C++ - это не дает C-Runtime возможность инициализировать различные вещи для домашнего хозяйства. _beginthreadex следует использовать вместо этого (или так я читаю.) – Ragster
Реализация такого механизма на POSIX не составит труда. Вам нужно будет использовать простой pthread_cond_wait – adf88
@Ragster - спасибо за подсказку. _beginthreadex() - действительно правильный способ запуска потока в Windows. –