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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.