Описание тега stdatomic

NoneStd::atomic is a class template in the C++11 Standard Library which provides atomic operations.
1 ответ

Почему Visual C++ 2015 позволяет присваивать std::atomic?

Несколько дней назад я написал что-то вроде следующего: struct A { std::atomic_bool b = false; }; Скомпилировано в Visual Studio 2015 Update 3 с компилятором VC++2015, ничего плохого не появилось.Теперь я перекомпилировал то же самое с GCC (5.4.0) в…
17 фев '17 в 14:26
1 ответ

Какие-нибудь недостатки для std::atomic_flag, не обеспечивающего операции загрузки или хранения? (Пример Spin-Lock)

Сравнивая std::atomic_flag для std::atomic_bool (ака std::atomic<bool> мне кажется, что std::atomic_flag просто имеет более простой интерфейс. Он обеспечивает только тестирование + установку и очистку флага во время std::atomic_bool также обес…
29 авг '18 в 07:05
0 ответов

Атомарные типы: завершить вызов после выброса экземпляра "std::system_error"

Я следую этому уроку. Я могу скомпилировать пример из командной строки: g++ -std=gnu++0x AtomicCounter.cpp -o AtomicCounter -lpthread Работает нормально, но когда я бегу ./AtomicCounter Это дает ошибку: прекращение вызова после выброса экземпляра 's…
16 ноя '16 в 03:07
1 ответ

В чем (небольшая) разница в расслабляющих атомных правилах?

После того, как Херб Саттерс отлично рассказал о "атомном оружии", я немного запутался в примерах " Расслабленной атомики". Я взял с собой, что атом в модели памяти C++ (SC-DRF = последовательная согласованность для Data Race Free) "получает" при за…
5 ответов

Стандарт C++: можно ли поднять блокированные атомарные хранилища выше блокировки мьютекса?

Есть ли в стандарте какая-либо формулировка, гарантирующая, что расслабленные хранилища для атомщиков не будут отменены над блокировкой мьютекса? Если нет, то есть ли какая-либо формулировка, в которой прямо говорится, что компилятору или процессору…
1 ответ

Потокобезопасность коллекции atomic int

У меня есть следующий класс, обертывающий вектор атомных целых (std::vector< std::atomic_int >) Вектор правильно измерен при построении объекта и не меняет размер. Есть обычные аксессоры и мутаторы для получения, установки атомных целых, но бе…
08 сен '15 в 15:40
2 ответа

Модель памяти в C++: последовательная согласованность и атомарность

У меня есть несколько вопросов, связанных с моделью памяти в C++11. На https://www.think-cell.com/en/career/talks/pdf/think-cell_talk_memorymodel.pdf на 29. слайде написано Модель памяти C++ гарантирует последовательную согласованность Но в моих пре…
17 июл '16 в 21:05
1 ответ

Не могу скомпилировать libpd с помощью emmake (Emscripten SDK)

Я пытаюсь скомпилировать libpd для JavaScript или веб-сборки с помощью emscripten SDK. Согласно некоторым документам, если есть Makefile, его можно скомпилировать с помощью emmake make, (emconfigure не используется, потому что нет файла./configure),…
1 ответ

Читать переменную в другом потоке

Я использую Linux, и у меня есть две переменные, которые для чтения / записи в другом потоке. Время от времени (100 мс) ThreadB читает состояние переменных и что-то делает. Это в основном while(1){ dosomething(); usleep(); }, Я беспокоюсь, что перем…
20 июн '15 в 18:22
1 ответ

C++11: разница между memory_order_relaxed и memory_order_consume

Сейчас я изучаю модель порядка памяти C++11 и хотел бы понять разницу между memory_order_relaxed а также memory_order_consume, Чтобы быть конкретным, я ищу простой пример, где нельзя заменить memory_order_consume с memory_order_relaxed, Существует о…
09 июл '16 в 10:03
3 ответа

Всегда ли atomic<T *> блокируется?

На моей MAC OS, atomic&lt;T*&gt; без блокировки. #include &lt;iostream&gt; #include &lt;atomic&gt; int main() { std::cout &lt;&lt; std::atomic&lt;void*&gt;().is_lock_free() &lt;&lt; std::endl; return 0; } output: 1 Я хочу знать, если atomic&lt;T*&gt…
13 авг '18 в 12:23
1 ответ

C++ shared_mutex реализация

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

Как сделать так, чтобы хранилища памяти в одном потоке "быстро" были видны в других потоках?

Предположим, я хотел скопировать содержимое регистра устройства в переменную, которая будет считываться несколькими потоками. Есть ли хороший общий способ сделать это? Вот примеры двух возможных способов сделать это: #include &lt;atomic&gt; volatile…
02 фев '17 в 13:43
1 ответ

Проблема с использованием std::atomic_flag с рабочим потоком

Извините за многословие - я приложил все усилия, чтобы сжать мой пример кода в минимально функциональный класс и main() метод. Я пытаюсь использовать atomic_flag уведомить _rx() в моем рабочем потоке, чтобы выйти, когда stop() называется. Я считаю, …
17 июн '15 в 13:53
1 ответ

Почему std::atomic<double> не реализован при компиляции с помощью clang?

Рассмотрим следующий фрагмент кода: #include &lt;atomic&gt; int main(void) { std::atomic&lt;double&gt; aDouble; aDouble = 6.0; } G ++ компилирует это просто отлично, в то время как clang++ производит следующее: clang++ -std=c++11 Main.cpp /tmp/Main-…
07 мар '15 в 21:57
1 ответ

Неопределенная ссылка в статической библиотеке на атомарный C++11

У меня проблема при использовании статической библиотеки, которую я создаю заранее в проекте. Эта статическая библиотека использует атомарный C++11. Все хорошо компилируется и моя статическая библиотека создана. Однако, когда я пытаюсь использовать …
11 фев '16 в 12:35
1 ответ

С ++11 атомика. visibility и thread.join() / правильный способ остановить поток

За что (если есть?) STORE_ORDER & LOAD_ORDER C++11 гарантирует, что этот код выполняется за конечное время? std::atomic&lt;bool&gt; a{false}; std::thread t{[&amp;]{ while(!a.load(LOAD_ORDER)); }}; a.store(true, STORE_ORDER); t.join(); Я вижу две про…
1 ответ

Может ли переупорядочение памяти во время компиляции привести к тупикам?

Во время просмотра этого разговора о реализации атомарного кода C++11 в LLVM появился этот фрагмент кода. -- Initially -- int x = 0; std::atomic&lt;bool&gt; flag1{false}, flag2{false}; -- Thread 1 -- x = 42; flag1.store(true, std::memory_order_relea…
13 дек '14 в 11:17
0 ответов

Есть ли дополнительные расходы для std::atomic?

Я пытаюсь реализовать структуру данных без блокировки для проекта, над которым я работаю. Это симуляция со многими деталями (1 миллион>), и я пытаюсь сделать так, чтобы детали занимали как можно меньший размер? Если бы вы могли предоставить больше и…
23 июн '16 в 18:09
1 ответ

Хранилище атомной нагрузки с порядком памяти

В потоке A сначала выполняется x.store(1, std::memory_order_release), затем в потоке B запускается x.load(std::memory_order_acquire) . x в потоке B не гарантирует чтение 1 хранилища по A. Если я использую memory_order_seq_cst, он будет гарантированн…