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

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Самый быстрый способ разбудить поток без использования условной переменной

Сообщение Anonymous »

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

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

Код: Выделить всё

pthread_cond_wait/pthread_cond_signal/pthread_mutex_lock/pthread_mutex_unlock
).

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

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

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

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

Подробнее здесь: https://stackoverflow.com/questions/559 ... n-variable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»