самый быстрый способ разбудить поток без использования условной переменной

Я пытаюсь ускорить выполнение части кода, уже настроив фоновые потоки для решения одной конкретной задачи. Когда пришло время решить мою задачу, я хотел бы разбудить эти потоки, выполнить задание и снова заблокировать их, ожидая следующей задачи. Задача всегда одна и та же.

Я пробовал использовать условные переменные (и мьютексы, которые должны идти с ними), но в итоге я замедлил свой код вместо того, чтобы ускорить его; в основном это произошло из-за того, что вызовы всех необходимых функций очень дороги ( pthread_cond_wait / pthread_cond_signal / pthread_mutex_lock / pthread_mutex_unlock ).

Нет смысла использовать пул потоков (у меня его тоже нет) потому что это слишком общая конструкция; здесь я хочу обратиться только к моей конкретной задаче. В зависимости от реализации, я бы также заплатил штраф за производительность очереди.

Есть ли у вас какие-либо предложения по быстрому пробуждению без использования мьютекса или con_var ?

Я думал о потоках настройки, таких как таймеры, считывающие атомарную переменную ; если переменная установлена ​​в 1, потоки выполнят работу; если он установлен на 0, они будут переходить в спящий режим на несколько микросекунд (я бы начал с микросекундного спящего режима, так как я хотел бы избежать использования спин-блокировок , которые могут быть слишком дорогими для процессора). Что вы думаете об этом? Любое предложение приветствуется.

Я использую Linux, gcc, C и C ++.

7
задан unwind 8 April 2011 в 10:40
поделиться