Pthread_mutex_t vs std::atomic_flag скорость, когда блокировка может быть достигнута немедленно?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Pthread_mutex_t vs std::atomic_flag скорость, когда блокировка может быть достигнута немедленно?

Сообщение Anonymous »

Я использую многоплатформенный API, который использует pthread_mutex_t для блокировок с ограниченной областью, чтобы гарантировать, что вещи не делают того, чего не должны делать. Я хочу использовать методы блокировки области действия, предоставляемые этим API, если это возможно, чтобы обеспечить единообразие.
Что именно происходит, когда pthread_mutex_t ДЕЙСТВИТЕЛЬНО достигает блокировки сразу? Это сверхбыстрый процесс (всего несколько циклов ЦП) или система должна вызвать какой-то медленный метод ОС, прежде чем выполнение сможет продолжиться?
Я создаю систему реального времени, которая должна быть максимально быстрой, поскольку она обрабатывает звук в реальном времени и не должна зависать, когда это возможно. Эти мьютексы будут проверяться множество раз в секунду. Вот почему я спрашиваю. Другой альтернативой было бы использование std::atomic_flag:

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

        while (m_atomic_flag.test_and_set());
Для моей цели это было бы очень быстро, но у этого есть обратная сторона: остановка всего ядра ЦП, если блокировка не будет достигнута. Поэтому, если pthread_mutex_t будет действительно быстрым, когда он действительно МОЖЕТ получить блокировку НЕМЕДЛЕННО, это будет оптимально для моего использования.
Итак, в моем случае мне действительно нужно, чтобы блокировка происходила немедленно в течение нескольких циклов ЦП, когда она доступна. Если процессу необходимо дождаться блокировки, это может занять столько времени, сколько необходимо процессу. Поэтому передача должна быть максимально быстрой.
Мне безопасно использовать pthread_mutex_t или мне следует просто использовать std::atomic_flag?
Я пробовал читать Для критических разделов - когда использовать std::mutex или std::atomic_flag? но это не совсем подходит для моего случая реального времени.

Подробнее здесь: https://stackoverflow.com/questions/798 ... mmediately
Ответить

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

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

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

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

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