Как предотвратить приостановку потока во время небольшой критической работы? - PullRequest
0 голосов
/ 26 января 2019

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

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

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

Есть ли способ в c ++ для решения этой проблемы? Я использую gcc-8.2.0 и stl в коробке linux.

На самом деле я ожидаю метод, с помощью которого я могу определить «критическую секцию» кодов. Когда потоки выполняются внутри такого раздела, они никогда не будут приостановлены / заблокированы ОС.

Извините за мой плохой английский, надеюсь, я все правильно выразил. Спасибо!

...