Ответ 1
Я работал над тем, что мог бы использовать, и я опубликовал его на github: он невообразимо называется threadpool.
Какие реализации с открытым исходным кодом в C для пула потоков pthreads вы бы порекомендовали?
Дополнительные точки, если эта реализация:
Я работал над тем, что мог бы использовать, и я опубликовал его на github: он невообразимо называется threadpool.
Если ваша цель - легкая, то последняя вещь, которую вы хотите, представляет собой предварительно написанную, супер-универсальную реализацию с высоким уровнем абстракции. Реализация пула потоков самостоятельно, соответствующая вашей конкретной задаче, довольно тривиальна, но вы также можете задать вопрос, действительно ли вам нужен пул потоков, или вы будете просто создавать и уничтожать потоки по мере необходимости.
Не зная подробностей о вашем приложении, я не могу дать более конкретные рекомендации. Но инструменты, которые могут вам пригодиться, следующие:
Я использовал этот, который фактически не является официальной реализацией как таковой. Он использует pthreads по вашему запросу и должен дать вам некоторые идеи о том, что вам нужно делать. (См. threadpool.h
, threadpool.c
, threadpool_test.c
и Makefile
для инструкций о том, как скомпилировать.) Очевидно, вам придется сделать рефакторинг как оригинальное намерение, вероятно, отличается от вашего. На самом деле он довольно хорошо комментировал.
Несмотря на то, что это отклоняется от первоначального вопроса, я также хотел бы упомянуть, что новейший стандарт C, неофициально C1X (см. википедию, ограничение гиперссылки), запланировал поддержку потоков N1570 (снова google, гиперссылка!) (7.31.15).
Некоторые личные советы из моего опыта состоят в том, чтобы убедиться, что ваше приложение может быть запущено параллельно, и если накладные расходы на создание нового потока настолько высоки, что вы не можете жить без пула потоков. Лично я ошибался в обеих этих частях, и на самом деле я закончил реализацию медленнее, чем мое однопоточное приложение. Кроме того, вы можете быть в курсе различных проблем, включая блокировки кэшей и промахи, что фактически ухудшит производительность вашего приложения.
Наверное, я, кстати, сейчас болтаю, но, скорее всего, удачу.
Вот реализация с этими функциями: