Я пытаюсь ускорить выполнение части кода, уже настроив фоновые потоки для решения одной конкретной задачи. Когда пришло время решить мою задачу, я хотел бы разбудить эти потоки, выполнить задание и снова заблокировать их, ожидая следующей задачи. Задача всегда одна и та же.
Я пробовал использовать условные переменные (и мьютексы, которые должны идти с ними), но в итоге я замедлил свой код вместо того, чтобы ускорить его; в основном это произошло из-за того, что вызовы всех необходимых функций очень дороги ( pthread_cond_wait / pthread_cond_signal / pthread_mutex_lock / pthread_mutex_unlock
).
Нет смысла использовать пул потоков (у меня его тоже нет) потому что это слишком общая конструкция; здесь я хочу обратиться только к моей конкретной задаче. В зависимости от реализации, я бы также заплатил штраф за производительность очереди.
Есть ли у вас какие-либо предложения по быстрому пробуждению без использования мьютекса
или con_var
?
Я думал о потоках настройки, таких как таймеры, считывающие атомарную переменную
; если переменная установлена в 1, потоки выполнят работу; если он установлен на 0, они будут переходить в спящий режим на несколько микросекунд (я бы начал с микросекундного спящего режима, так как я хотел бы избежать использования спин-блокировок
, которые могут быть слишком дорогими для процессора). Что вы думаете об этом? Любое предложение приветствуется.
Я использую Linux, gcc, C и C ++.