Я читаю документацию и, более конкретно, < /p>
memory_order_acquire < /strong>: операция нагрузки с этим порядком памяти выполняет
, чтобы получить операцию приобретения в зависимости от места памяти: нет чтения или
в текущем потоке может быть переупорядочена до этой загрузки. Все
записывает в других темах, которые выпускают одну и ту же атомную переменную,
видны в текущем потоке (см. Заказ о выпуске-акквийре ниже). < /P>
memory_order_release < /strong>: операция хранилища с этим порядком памяти
выполняет операцию релиза: No Reads или написано в текущем
Truded Thate. All writes in the current
thread are visible in other threads that acquire the same atomic
variable (see Release-Acquire ordering below) and writes that carry a
dependency into the atomic variable become visible in other threads
that consume the same atomic (see Release-Consume ordering below)
These two биты: < /p>
from memory_order_acquire < /em> < /p>
... без чтения или записи в текущем потоке может быть повторно порядок перед этой загрузкой ... < /p>
< /blockquote>
< /p>
< /blockquote> memore_order_release < /em> < /p>
... без чтения или записи в текущем потоке может быть повторно зарегистрировано после этого хранилища ... < /p>
< /blockquote>
Что именно они значат? />
#include
#include
#include
#include
std::atomic ptr;
int data;
void producer()
{
std::string* p = new std::string("Hello");
data = 42;
ptr.store(p, std::memory_order_release);
}
void consumer()
{
std::string* p2;
while (!(p2 = ptr.load(std::memory_order_acquire)))
;
assert(*p2 == "Hello"); // never fires
assert(data == 42); // never fires
}
int main()
{
std::thread t1(producer);
std::thread t2(consumer);
t1.join(); t2.join();
}
< /code>
Но я не могу понять, где применяются два бита, которые я цитировал. Я понимаю, что происходит, но на самом деле я не вижу повторного заказа, потому что код маленький.
Подробнее здесь: https://stackoverflow.com/questions/596 ... ase-in-c11
Понимание `memory_order_acquire` и` memory_order_release` в C ++ 11 ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1754729638
Anonymous
Я читаю документацию и, более конкретно, < /p>
memory_order_acquire < /strong>: операция нагрузки с этим порядком памяти выполняет
, чтобы получить операцию приобретения в зависимости от места памяти: нет чтения или
в текущем потоке может быть переупорядочена до этой загрузки. Все
записывает в других темах, которые выпускают одну и ту же атомную переменную,
видны в текущем потоке (см. Заказ о выпуске-акквийре ниже). < /P>
memory_order_release < /strong>: операция хранилища с этим порядком памяти
выполняет операцию релиза: No Reads или написано в текущем
Truded Thate. All writes in the current
thread are visible in other threads that acquire the same atomic
variable (see Release-Acquire ordering below) and writes that carry a
dependency into the atomic variable become visible in other threads
that consume the same atomic (see Release-Consume ordering below)
These two биты: < /p>
from memory_order_acquire < /em> < /p>
... без чтения или записи в текущем потоке может быть повторно порядок перед этой загрузкой ... < /p>
< /blockquote>
< /p>
< /blockquote> memore_order_release < /em> < /p>
... без чтения или записи в текущем потоке может быть повторно зарегистрировано после этого хранилища ... < /p>
< /blockquote>
Что именно они значат? />
#include
#include
#include
#include
std::atomic ptr;
int data;
void producer()
{
std::string* p = new std::string("Hello");
data = 42;
ptr.store(p, std::memory_order_release);
}
void consumer()
{
std::string* p2;
while (!(p2 = ptr.load(std::memory_order_acquire)))
;
assert(*p2 == "Hello"); // never fires
assert(data == 42); // never fires
}
int main()
{
std::thread t1(producer);
std::thread t2(consumer);
t1.join(); t2.join();
}
< /code>
Но я не могу понять, где применяются два бита, которые я цитировал. Я понимаю, что происходит, но на самом деле я не вижу повторного заказа, потому что код маленький.
Подробнее здесь: [url]https://stackoverflow.com/questions/59626494/understanding-memory-order-acquire-and-memory-order-release-in-c11[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия