Re: C++11 atomic -- вопросы
От: placement_new  
Дата: 28.02.14 13:12
Оценка: 25 (3) +2
Здравствуйте, FrozenHeart, Вы писали:

FH>Здравствуйте, коллеги.



FH>И ещё -- кто-нибудь может посоветовать годный мануал на тему std::memory_order и его правильного использования?




http://www.ozon.ru/context/detail/id/24167719/
C++11 atomic -- вопросы
От: FrozenHeart  
Дата: 28.02.14 11:47
Оценка: 1 (1)
Здравствуйте, коллеги.

Правильно ли я понял:

— Мне не надо явно использовать какие-либо примитивы синхронизации для одновременного read-write доступа из нескольких потоков для любых объектов класса std::atomic<T>
— Операции, выполняемые над объектами класса std::atomic<T>, могут быть как lock-free, так и non-lock-free, в зависимости от конкретной реализации
— std::atomic_bool и std::atomic<bool> (а также другие подобные им типы из C++11), на самом деле, одно и то же
— std::atomic_flag -- единственный класс, для объектов которого стандартом гарантируется, что все операции будут lock-free

И ещё -- кто-нибудь может посоветовать годный мануал на тему std::memory_order и его правильного использования?

Заранее благодарю.
avalon/1.0.434
Re: C++11 atomic -- вопросы
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.04.14 22:34
Оценка: 1 (1)
Здравствуйте, FrozenHeart, Вы писали:

И да, это... по поводу atomic-ов. Скорее всего, коллеги, они вам не нужны, даже когда вы думаете что они вам сильно нужны
Re: C++11 atomic -- вопросы
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.03.14 08:06
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>- Мне не надо явно использовать какие-либо примитивы синхронизации для одновременного read-write доступа из нескольких потоков для любых объектов класса std::atomic<T>


Дополнительные — нет, если правильно задан memory order операции и ничего дополнительно не нужно.

FH>- Операции, выполняемые над объектами класса std::atomic<T>, могут быть как lock-free, так и non-lock-free, в зависимости от конкретной реализации


Ну в общем да. Хотя сейчас сложно встретить платформу, где для этого потребуется лок. Вот LL/SC цикл — да, возможно (и может быть примерно так же дорого, как явный лок).

FH>И ещё -- кто-нибудь может посоветовать годный мануал на тему std::memory_order и его правильного использования?


Ну например http://preshing.com/20120612/an-introduction-to-lock-free-programming/ и далее по ссылкам из него (разжёвано очень детально, если нужно).
The God is real, unless declared integer.
Re[2]: C++11 atomic -- вопросы
От: vermont  
Дата: 05.04.14 20:32
Оценка:
ссылка не работает...
Re[3]: C++11 atomic -- вопросы
От: DarkEld3r  
Дата: 05.04.14 21:49
Оценка:
Здравствуйте, vermont, Вы писали:

V>ссылка не работает...

Подозреваю, что там была ссылка на книгу "C++ Concurrency in Action".
Re: C++11 atomic -- вопросы
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.04.14 22:29
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>Здравствуйте, коллеги.


FH>Правильно ли я понял:


FH>- Мне не надо явно использовать какие-либо примитивы синхронизации для одновременного read-write доступа из нескольких потоков для любых объектов класса std::atomic<T>


Если значения переменных должны быть согласованы, то нужно. В противном случае, поток может увидеть несогласованное состояние, даже если вы используете std::atomic.

FH>- Операции, выполняемые над объектами класса std::atomic<T>, могут быть как lock-free, так и non-lock-free, в зависимости от конкретной реализации


Операции не могут быть lock-free, lock-free это свойство алгоритма, которое гарантирует что хотя бы один поток будет совершать прогресс.

FH>- std::atomic_flag -- единственный класс, для объектов которого стандартом гарантируется, что все операции будут lock-free


См. выше
Re: C++11 atomic -- вопросы
От: Alex_Avr Россия  
Дата: 07.04.14 04:39
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>Правильно ли я понял:


FH>- Мне не надо явно использовать какие-либо примитивы синхронизации для одновременного read-write доступа из нескольких потоков для любых объектов класса std::atomic<T>

Да, только нужно указывать корректный memory_order для операций с ним.
Согласованность доступа гарантируется при использовании std::memory_order_seq_cst (используется по умолчанию).
Корректное использование сочетания .store(..., std::memory_order_acquire) с .load(..., std::memory_order_release) также гарантирует
отсутствие гонок при меньших накладных расходах, чем std::memory_order_seq_cst.
Использование std::memory_order_relaxed не рекомендуется, т.к. почти ничего не гарантирует.

FH>- Операции, выполняемые над объектами класса std::atomic<T>, могут быть как lock-free, так и non-lock-free, в зависимости от конкретной реализации

Да.

FH>- std::atomic_bool и std::atomic<bool> (а также другие подобные им типы из C++11), на самом деле, одно и то же

Да.

FH>- std::atomic_flag -- единственный класс, для объектов которого стандартом гарантируется, что все операции будут lock-free

Да

FH>И ещё -- кто-нибудь может посоветовать годный мануал на тему std::memory_order и его правильного использования?

Очень рекомендую Anthony Williams "C++ Concurrency in Action. Practical Multithreading", там рассмотрены множество вопросов
(включая разработку lock-free и lock-based структур данных) помимо использования std::atomic.

Также реклмендую C++ and Beyond 2012: Herb Sutter &mdash; atomic&lt;&gt; Weapons, 1 of 2, C++ and Beyond 2012: Herb Sutter &mdash; atomic&lt;&gt; Weapons, 2 of 2
С уважением, Александр Авраменко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.