Описание тега lock-free

Общий термин для методов и алгоритмов синхронизации многопоточных сред или других форм распределенных систем без использования блокировок.
4 ответа

Чтение-запись потокобезопасного интеллектуального указателя в C++, x86-64

Я разрабатываю некоторую структуру данных без блокировки, и возникает следующая проблема. У меня есть поток писателя, который создает объекты в куче и оборачивает их в смарт-указатель со счетчиком ссылок. У меня также есть много читательских тем, ко…
04 ноя '11 в 09:30
1 ответ

Хорошо проверенная C/C++ блокировка свободной очереди?

Возможный дубликат: Есть ли готовая к производству очередь без блокировки или хэш-реализация в C++? Я ищу хорошо протестированную, общедоступную реализацию C/C++ очереди без блокировок. Мне нужно по крайней мере несколько производителей / один потре…
27 апр '10 в 09:07
3 ответа

Должны ли инструкции ARM ldrex/strex работать с данными, выровненными по кешу?

В Intel аргументы CMPXCHG должны быть выровнены по строке кэша (поскольку Intel использует MESI для реализации CAS). На ARM ldrex и strex работают на эксклюзивных гранулах бронирования. Чтобы было ясно, значит ли это, что в ARM данные, на которые ну…
08 июл '12 в 12:23
3 ответа

Защита без блокировки для синхронизированного захвата / выпуска

У меня есть общий ресурс tempfile, который разделен на куски по 4K (или какое-то подобное значение). Каждый 4K в файле представлен индексом, начинающимся с нуля. Для этого общего ресурса я отслеживаю используемые индексы блоков 4K и всегда возвращаю…
3 ответа

Многопоточность без блокировок медленнее, чем однопоточная программа?

Я рассмотрел распараллеливание программы так, чтобы на первом этапе она сортировала элементы по сегментам по модулю числа параллельных рабочих, чтобы избежать столкновений на втором этапе. Каждый поток параллельной программы использует std::atomic::…
15 июн '17 в 07:30
4 ответа

Существует ли очередь с несколькими потребителями без блокировки блокировки для C++?

Чем больше я читаю, тем больше я запутываюсь... Я бы подумал, что банально найти формально правильную очередь mpsc, реализованную в C++. Каждый раз, когда я обнаруживаю новый удар, дальнейшие исследования показывают, что существуют проблемы, такие к…
18 янв '12 в 22:23
1 ответ

LinkedList.addAll запускает исключение нулевого указателя в многопоточном приложении

У меня есть LinkedList, который изменяется одним потоком. Но есть много тем, читающих это. protected volatile LinkedList<V> list = new LinkedList<V>(); Мне нужно получить этот список в какой-то момент. Итак, когда я делаю, List<V> …
1 ответ

Имеют ли неатомарные объекты одинаковый порядок модификации во всех потоках? (при отсутствии данных гонок)

1.10/6: Все модификации конкретного атомного объекта M происходят в определенном общем порядке, называемом порядком модификации M. Неатомарные объекты также имеют одинаковый порядок модификации во всех потоках? Меня интересуют правильно синхронизиро…
10 фев '13 в 17:49
1 ответ

Механизм мнимой блокировки: неблокирующая запись, чтение и аннулирование

Вот сценарий. Боб - писатель, а Алиса - читатель. Боб пишет вещи, а Алиса читает их. Правила таковы: 1) Боб может писать, читает ли Алиса или нет (чтение не блокирует запись). 2) Когда Боб пишет, Алиса не может читать (запись делает чтение блоков). …
02 июн '17 в 09:42
6 ответов

Как добиться безблокировочного, но блокирующего поведения?

Я реализую очередь без единого производителя без блокировки для одного интенсивного сетевого приложения. У меня есть куча рабочих потоков, получающих работу в своих отдельных очередях, которые они затем удаляют и обрабатывают. Удаление блокировок из…
22 май '11 в 18:34
2 ответа

Считать актуальное значение из переменной Interlocked с единственной записью в переменную

Я хотел бы создать класс с двумя методами: void SetValue(T value) сохраняет значение, но позволяет хранить только одно значение (в противном случае создается исключение). T GetValue() извлекает значение (и выдает исключение, если значения еще нет). …
21 фев '13 в 14:44
5 ответов

C код безблокировочной очереди

Как я могу реализовать этот псевдокод очереди без блокировки в C? ENQUEUE(x) q ← new record q^.value ← x q^.next ← NULL repeat p ← tail succ ← COMPARE&SWAP(p^.next, NULL, q) if succ ≠ TRUE COMPARE&SWAP(tail, p, p^.next) until succ = TRUE COM…
23 май '11 в 02:24
1 ответ

Использование барьера памяти в очередях без блокировки

Недавно я прочитал официальный документ Пола МакКенни 2010 года "Барьеры памяти: аппаратное представление для хакеров программного обеспечения". Я был бы очень признателен за некоторые отзывы / комментарии / рекомендации в отношении небольших раздел…
10 сен '12 в 09:14
3 ответа

Атомарные операции для двойного связанного списка без блокировки

Я пишу двухсвязный список без блокировки, основанный на следующих документах: "Эффективное и надежное восстановление памяти без блокировки на основе подсчета ссылок" Андерс Гиденстам, член IEEE, Марина Папатриантафилу, Хоакан Санделл и Филиппас Цига…
26 окт '13 в 17:04
1 ответ

Переупорядочение зависимых нагрузок в процессоре

Я читал очень популярную статью Пола МакКенни (Paul E. McKenney), " Память барьеров: взгляд на оборудование для хакеров". В статье подчеркивается, что очень слабо упорядоченные процессоры, такие как Alpha, могут переупорядочивать зависимые нагрузки,…
1 ответ

Перемещение значений между списками без блокировки

Фон Я пытаюсь разработать и реализовать хэш-карту без блокировки, используя метод цепочки в C++. Каждая ячейка хеш-таблицы должна содержать список без блокировки. Чтобы разрешить изменение размера, моя структура данных должна содержать два массива -…
16 окт '18 в 18:21
5 ответов

Многопоточное чтение, запись, выравнивание

У меня есть следующая программа. class A { struct { int d1; int d2; } m_d; int onTimer() { return m_d.d1 + m_d.d2; } void update(int d1, int d2) { m_d.d1 = d1; m_d.d2 = d2; } }; A::update а также A::onTimer вызываются двумя разными потоками. При усл…
04 мар '16 в 00:55
1 ответ

Почему эта блокировка свободной очереди работает?

Я переписываю старую реализацию очереди без блокировки, я начал с использования memory_order_relaxed для всего с целью ужесточения семантики памяти и добавления автономных заборов и т. Д. Позже. Но, как ни странно, это работает.. Я попытался скомпил…
09 мар '16 в 16:19
1 ответ

InterlockedCompareExchange - каковы точные требования к выравниванию и как их можно применять?

У меня возникают проблемы с пониманием значения документации MSDN для семейства функций Interlocked Variable Access. Я использую InterlockedExchange для установки и InterlockedCompareExchange для получения переменной-члена, которая используется неск…
1 ответ

Атомная функция без блокировок для изменения двух независимых областей памяти

У меня есть следующая функция называется updateEntry который записывает значение в таблицу поиска. Я хотел бы создать многопоточную версию этой функции. Я смотрел в атомной операции __sync_bool_compare_and_swap но я не уверен, как правильно применят…
01 май '17 в 09:02