Что еще угарнее - название использованного алгоритма так и не приводится в книжке. Пребываю в легком недоумении
Update: а реализация барьеров в главе 7 совершенно безобразна. Вместо того чтобы сначала взвести все переменные и только потом вызывать pthread_cond_broadcast, гражданин вводит лишнюю сущность color. Только это не работает
Предположим что после вызова pthread_cond_broadcast текущий поток вытесняется и один из проснувшихся потоков повторно входит в барьер, уменьшая значение счетчика (который становится -1). Поток соотв-но встает на pthread_cond_wait. Затем исходный поток оживает, сбрасывает count в numThreads и идет по своим делам. Итого - один поток потерялся навсегда и
все последующие потоки будут тупить на его реализации барьера вечно
И еще было бы неплохо объявить поле numThreads в структуре pth_barrier_t как volatile, а то малоличо
Комментариев нет:
Отправить комментарий