Вопросы по теме 'compare-and-swap'

Параллелизм Java: CAS против блокировки
Я читаю книгу Java Concurrency in Practice . В главе 15 речь идет о неблокирующих алгоритмах и методе сравнения и замены (CAS). Написано, что CAS работают намного лучше, чем методы блокировки. Я хочу спросить людей, которые уже работали с...
28494 просмотров

Сравнить и поменять местами C ++ 0x
Из предложения C ++ 0x об атомарных типах и операциях C ++: 29.1 Порядок и последовательность [atomics.order] Добавьте новый подпункт со следующими абзацами. Перечисление memory_order определяет подробный регулярный...
2843 просмотров

в чем разница между gcc __sync_bool_compare_and_swap и cmpxchg?
чтобы использовать cas, gcc предоставляет некоторые полезные функции, такие как __sync_bool_compare_and_swap но мы также можем использовать ассемблерный код, такой как cmpxchg bool ret; __asm__ __volatile__( "lock cmpxchg16b %1;\n"...
5125 просмотров
schedule 30.01.2023

Атомное сравнение и обмен со структурой в Go
Я пытаюсь создать неблокирующий пакет очереди для параллельного приложения, используя алгоритм Магеда М. Майкла и Майкла Л. Скотта, как описано здесь . Для этого требуется использование атомарного CompareAndSwap, который предлагается в пакете...
5953 просмотров
schedule 08.08.2022

Уместно ли использовать AtomicReference.compareAndSet для установки ссылки на результаты вызова базы данных?
Я реализую простой кеш с кешем, хранящимся как AtomicReference. private AtomicReference<Map<String, String>> cacheData; Объект кэша должен заполняться (лениво) из таблицы базы данных. Я предоставляю метод для возврата данных...
5232 просмотров

Создание CMPXCHG (без LOCK) в 64-битных сборках с использованием Visual C ++ (2010)
Мне нужны функции CAS для использования в контексте нескольких потоков, работающих на одном ЦП (предположим, что все потоки статически приклеены к выбранному ЦП через SetThreadAffinityMask ). InterlockedCompareExchange генерирует LOCK CMPXCHG....
898 просмотров

В каких ситуациях do-while может быть более эффективным, чем while?
Пока и делать-пока Пока и do-while функционально эквивалентны, когда блоки пусты , хотя while кажется более естественным: do {} while (keepLooping()); while (keepLooping()) {} Одним из типичных случаев использования while/do-while с...
1713 просмотров

Преимущества и недостатки программирования CAS
Может ли кто-нибудь рассказать мне о преимуществах и недостатках программирования Compare And Swap ? (например, производительность многоядерного процессора) Здесь и пример на Java: /** * Atomically increments by one the current value. * *...
1689 просмотров

Как атомарно изменять элементы структуры без использования блокировок в C?
Я хотел бы атомарно изменить некоторые элементы структуры. Моя текущая реализация использует мьютексы для защиты критического кода, и это можно увидеть ниже. #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include...
154 просмотров
schedule 29.05.2022

Атомная переменная Java set() против compareAndSet()
Я хочу знать разницу между set() и compareAndSet() в атомарных классах. Обеспечивает ли метод set() атомарный процесс? Например, этот код: public class sampleAtomic{ private static AtomicLong id = new AtomicLong(0); public void...
10640 просмотров
schedule 02.02.2024

Почему операция «Сравнить и поменять местами» ограничена законом Амдала?
Мартин Томпсон утверждает, , что STM, который опирается на рефери, который опирается на CAS, в конечном итоге будет ограничен законом Амдала . закон Амдала состоит в том, что максимальная производительность параллельной программы ограничена...
139 просмотров

Как работает сравнение и обмен
Я прочитал довольно много сообщений, в которых говорится, что сравнение и обмен гарантируют атомарность, однако я до сих пор не могу понять, как это делается. Вот общий псевдокод для сравнения и обмена: int CAS(int *ptr,int oldvalue,int...
33928 просмотров
schedule 13.07.2022

Сборка Intel x86 для сравнения и сброса памяти
Возможно ли на процессоре Intel x86 сравнивать одно значение с другим в определенной ячейке памяти, сбрасывая память, если сравнение прошло успешно, не беспокоясь о проблемах многопоточности/процессора? Вижу инструкцию CMPXCHG - подойдет? Или есть...
741 просмотров
schedule 27.04.2022

Настроить функцию сравнения NSString?
Я хочу отсортировать массив строк, похожий на http://docs.oracle.com/javase/tutorial/i18n/text/rule.html в объекте C, я думаю, похоже на http://docs.oracle.com/javase/tutorial/i18n/text/rule.html Спасибо.
60 просмотров
schedule 21.12.2022

Как реализовать атомарное сравнение и обмен с помощью инструкции сборки cmpxchg8b в c?
Я пытаюсь реализовать связанный список без блокировки. Для этого мне нужно реализовать атомарную инструкцию сравнения и замены, используя встроенную сборку в C. Я знаю, что мне нужно использовать инструкцию cmpxchg8b для x86 , однако я не могу...
1568 просмотров

порядок от самого высокого до самого низкого и изменения позиции из другого массива java
у меня есть два массива., один представляет собой целочисленный массив, а другой - массив строк. Здесь мне нужно упорядочить значения целочисленного массива для сортировки от самого высокого значения до самого низкого значения. в это время мне...
150 просмотров

В Java 7 ConcurrentHashMap, почему при записи требуется блокировка сегмента? Почему мы не можем снова использовать Unsafe, чтобы ничего не блокировалось?
Проходя внутреннюю реализацию Java 7 ConcurrentHashMap, я заметил, что для установки нового сегмента мы используем класс Unsafe, который выполняет упорядоченную запись и использует алгоритм сравнения и обмена, таким образом поддерживая неблокирующее...
129 просмотров

Cuda атомарность и условные переходы
Я пытаюсь написать CUDA версию кода serial как часть реализации периодического граничного условия в алгоритме молекулярной динамики. Идея состоит в том, что крошечную часть частиц, которые имеют нестандартные позиции, нужно вернуть обратно,...
200 просмотров
schedule 23.04.2022

memory_order_relaxed и атомарные операции RMW
В стандарте C ++ говорится, что операции RMW (чтение-изменение-запись) на атомике будут работать с последним значением атомарной переменной. Следовательно, использование memory_order_relaxed с этими операциями не повлияет на операцию RMW при...
563 просмотров

Замена двух элементов в Python
Я смотрел видео, где внезапно инструктор использует данный код, чтобы поменять местами два элемента списка L: L[suffix], L[i] = L[i], L[suffix] Какова процедура, предпринятая внутри для этого метода свопа? Формируется ли новый список? Или...
212 просмотров
schedule 23.09.2022