LINUX.ORG.RU

Семафор или условная переменная?


0

0
Дано N потоков, которые ждут некоего сигнала, чтобы начать работу. Главный поток готовит задание для этих потоков и посылает им долгожданный сигнал. N < числа поцессоров. Как лучше послать сигнал:

1) prepare_data();
for( int i = 0; i < N; ++i )
sem_post( start_sem );

или

2) pthread_mutex_lock( prepare_mutex );
prepare_data();
pthread_cond_broadcast( start_cond );
pthread_mutex_unlock( prepare_mutex );

Заранее спасибо за помощь.

Ответ на: комментарий от Joe_Bishop
Круто, конечно, но есть нюанс "... function is part of the Barriers option and need not be provided on all implementations". Мне это никак не канает :-(. Да и в Линуксе оно с какого времени есть?
yz
() автор топика
Ответ на: комментарий от yz
Без мутекса никак. Это мне и не нравится. получается, что для одной точки синхронизации аж три обращения к объектам синхронизации.
yz
() автор топика
Ответ на: комментарий от mv
В общем, я потестил "родные" барьеры из pthread и реализацию барьеров на условных переменных по мотивам boost. Переменные выиграли по скорости больше, чем на 10 процентов.
yz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.