У меня есть многопоточное приложение, в котором я один поток-производитель (основной) и несколько потребителей.
Теперь, исходя из основного, я хочу получить какой-то процент того, насколько далеко в работе находятся потребители. Реализовать счетчик просто, поскольку работа выполняется в цикле. Однако, поскольку этот цикл повторяется пару тысяч раз, может быть, даже больше миллиона раз. Я не хочу мьютексировать эту часть. Итак, я рассмотрел некоторые атомарные варианты записи в int.
Насколько я понимаю, я могу использовать встроенные атомарные функции из gcc: https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html
однако в нем нет функции просто чтения переменной, над которой я хочу работать.
Так что в основном мой вопрос.
- Могу ли я безопасно читать переменную от моего производителя, если я использую атомарные встроенные команды для записи в ту же переменную в потребителе
or
- мне нужна какая-то другая функция для чтения из переменной. и что это за функция
__sync_fetch_and_add(ptr, 0)
для чтенияptr
? - person i_am_jorf   schedule 10.06.2014volatile
, чтобы компилятор не оптимизировал чтение. - person markgz   schedule 10.06.2014