Есть ли способ присоединиться (заблокировать) в потоках POSIX, не выходя из соединения? - PullRequest
0 голосов
/ 02 мая 2010

Я утопаю в документах с многопоточностью / параллелизмом, пытаясь понять, как реализовать реализацию многопоточности на языке программирования, который я проектировал.

Я пытаюсь отобразить ментальную модель в библиотеку pthreads.h, но у меня возникают проблемы с одной вещью: мне нужно, чтобы экземпляры интерпретатора продолжали существовать после того, как они завершили интерпретацию routine (языка тип данных замыкания / функции), потому что позже я хочу присвоить им другие routine для интерпретации, тем самым сэкономив мне время на установку / разборку потока и интерпретатора.

Это было бы хорошо, за исключением того, что pthread_join(3) требует, чтобы я позвонил pthread_exit(3), чтобы "разблокировать" исходную ветку. Как я могу заблокировать исходный поток (когда ему нужен результат выполнения routine), а затем разблокировать его после завершения интерпретации дочерней процедуры?

Ответы [ 2 ]

1 голос
/ 02 мая 2010

Звучит так, будто вы действительно хотите реализовать Pattern Pool Pattern . Это создает довольно простую концептуальную модель, без повторного создания потока и снижения затрат. Некоторые ОС поддерживают его напрямую, в других это должно быть достаточно просто реализовать с использованием очереди и семафора.

1 голос
/ 02 мая 2010

Используйте pthread_cond_t; ожидайте его в одном потоке и передавайте или транслируйте в другом.

...