Вопросы с тегом 'stdatomic'

std:: atomic - это шаблон класса в стандартной библиотеке С++ 11, который обеспечивает атомарные операции.
6

Когда мне действительно нужно использовать atom <bool> вместо bool?

Является ли atomic<bool> избыточным, потому что bool является атомарным по своей природе? Я не думаю, что возможно иметь частично измененное значение bool. Когда мне действительно нужно использовать atomic<bool> вместо bool?
01 мая '13 в 15:12
3

Где замок для std :: atomic?

Если структура данных содержит в себе несколько элементов, атомная версия не может (всегда) блокироваться. Мне сказали, что это справедливо для более крупных типов, потому что процессор не может атомизировать данные без использования какой-либо блок...
11 мая '18 в 18:38
9

Почему компиляторы не объединяют избыточные std:: atomic write?

Мне интересно, почему компиляторы не готовы объединить последовательные записи одного и того же значения с одной атомной переменной, например: #include <atomic> std::atomic<int> y(0); void f() { auto order = std::memory_order_relaxed; ...
30 авг. '17 в 12:25
3

Чем отличаются memory_order_seq_cst и memory_order_acq_rel?

Магазины - это операции выпуска, а нагрузки - операции для обоих. Я знаю, что memory_order_seq_cst предназначен для наложения дополнительного общего порядка для всех операций, но я не могу построить пример, где это не так, если все memory_order_seq_...
09 сент. '12 в 16:26
2

Ошибка "Использовать удаленную функцию" с помощью std:: atomic_int

Я хочу использовать переменную std::atomic_int. В моем коде у меня есть: #include <atomic> std::atomic_int stop = 0; int main() { // Do something } И это дает мне ошибку компиляции: use of deleted function 'std::__atomic_base<_Int...
05 дек. '14 в 11:06
1

Приобретать/выпускать семантику с невременными магазинами на x64

У меня есть что-то вроде: if (f = acquire_load() == ) { ... use Foo } и auto f = new Foo(); release_store(f) Вы легко можете представить себе реализацию gets_load и release_store, которая использует атомарную нагрузку (memory_order_acquire) ...
19 февр. '16 в 23:21
5

Какие точные правила в модели памяти C++ предотвращают переупорядочение до операций по приобретению?

У меня есть вопрос относительно порядка операций в следующем коде: std::atomic<int> x; std::atomic<int> y; int r1; int r2; void thread1() { y.exchange(1, std::memory_order_acq_rel); r1 = x.load(std::memory_order_relaxed); } void thre...
02 окт. '18 в 10:27
2

Приобретать/выпускать семантику с 4 потоками

В настоящее время я читаю C++ "Параллельность в действии" Энтони Уильямса. Один из его списков показывает этот код, и он утверждает, что утверждение, что z != 0 может сработать. #include <atomic> #include <thread> #include <assert.h&g...
22 янв. '18 в 14:31
1

В чем разница между явной атомной нагрузкой/хранилищем и обычным оператором = и оператором T?

Рассмотрим эти два варианта: std::atomic<int> a; a = 1; int b = a; и std::atomic<int> a; a.store(1); int b = a.load(); Я вижу из документации, что вторая полностью атомарна, но я не понимаю, когда я должен использовать, что и какая ...
09 сент. '14 в 8:54
4

Нужно ли использовать std:: atomic, чтобы сигнализировать о завершении выполнения потока?

Я хотел бы проверить, завершено ли выполнение std::thread. Поиск stackoverflow я нашел следующий question, который решает эту проблему. В принятом ответе предлагается, чтобы рабочий поток установил переменную прямо перед выходом и основной поток про...
16 янв. '13 в 18:52
3

Atomic shared_ptr для одиночного списка без блокировки

Мне интересно, можно ли создать безопасный, потокобезопасный общий указатель для любой из "общих" архитектур, таких как x64 или ARMv7/ARMv8. Говоря о программировании без блокировки на cppcon2014, Херб Саттер представил (частичную) реализацию блокир...
07 июл. '15 в 18:59
4

Самый простой способ реализовать общий целочисленный счетчик в С++ 11 без мьютексов:

Предположим, что мы имеем следующий код, который подсчитывает количество случаев: int i=0; void f() { // do stuff . . . if(something_happens) ++i; } int main() { std::vector<std::thread> threads; for(int j = 0; j< std::threa...
17 февр. '14 в 17:06
1

Реализация С++ shared_mutex

boost::shared_mutex или std::shared_mutex (С++ 17) могут быть использованы для одного записывающего устройства, для нескольких читателей. В качестве учебного упражнения я собрал простую реализацию, которая использует спин-блокировку и имеет другие ог...
16 дек. '16 в 23:04
2

Будут ли две непринужденные записи в одно и то же место в разных потоках, всегда будут видны в том же порядке другими потоками?

В архитектуре x86 магазины в том же месте памяти имеют общий порядок, например, см. это видео. Каковы гарантии в модели памяти С++ 11? Точнее, в -- Initially -- std::atomic<int> x{0}; -- Thread 1 -- x.store(1, std::memory_order_release); --...
06 дек. '14 в 15:43
3

Почему g++ все еще требует -latomic

В 29.5. Атомные типы рабочего стандарта С++ Standard в ноябре 2014 года: Существует общий шаблонный шаблон. Тип аргумента шаблона T должен быть тривиально скопируемым (3.9). [Примечание. Невозможно использовать аргументы типа, которые также не мог...
02 июн. '15 в 8:44