Я портирование стопорную бесплатно очереди из C++ 11, чтобы пойти и я наткнулся на такие вещи, какПерейти атомные и память порядка
auto currentRead = writeIndex.load(std::memory_order_relaxed);
, а в некоторых случаях и std::memory_order_release
std::memory_order_aqcuire
также equivelent для выше в c11 нечто вроде
unsigned long currentRead = atomic_load_explicit(&q->writeIndex,memory_order_relaxed);
смысл тех описывается here
находится там п эквивалентна такой вещи в дороге или же я просто использовать что-то вроде
var currentRead uint64 = atomic.LoadUint64(&q.writeIndex)
после портирования я протестированные и только с помощью LoadUint64, кажется, работает, как ожидалось, но порядки медленнее и я задаюсь вопросом, сколько эффект дозы эти специализированные опы "надеты" работа.
- дополнительно информация от ссылки я прикреплен
memory_order_relaxed: Relaxed операции: нет синхронизации или заказные ограничений, только атомарность требуется эта операция.
memory_order_consume: операции загрузки с этим порядком памяти не выполняет потреблять операцию на пораженной ячейке памяти: не считывает в текущего потока зависит от величины загруженного в данный момент может быть заказана перед этой нагрузкой. Это гарантирует, что записи в зависящие от данных переменные в других потоках, выпускающих одну и ту же атомную переменную, являются , видимыми в текущем потоке. На большинстве платформ это влияет только на оптимизацию компилятора .
memory_order_acquire: операции загрузки с этим порядком памяти выполняет операцию сбора по затронутой на ячейке памяти: нет памяти не обращается в текущем потоке может быть заказана перед этим нагрузкой. Это гарантирует, что все записи в других потоках, которые выпускают , имеют такую же атомную переменную, которые видны в текущем потоке.
memory_order_release: операция сохранения с этой памятью для того, выполняет операцию выхода: память не обращается в текущих нитей может быть перераспределена после этого магазина. Это гарантирует, что все записи в текущем потоке видны в других потоках, которые приобретают, или той же атомной переменной, и записи, несущие зависимость от атомарной переменной , становятся видимыми в других потоках, которые потребляют то же самое атома.