Описание тега compare-and-swap

Сравнение и замена (сравнение и обмен) - это атомарная операция, которая записывает значение в ячейку памяти, только если его текущее значение равно заданному ожидаемому значению.
5 ответов

Сравните и поменяйте местами машинный код на C

Как бы вы написали функцию на C, которая выполняет атомарное сравнение и замену целочисленного значения, используя встроенный машинный код (предположим, скажем, архитектуру x86)? Может ли он быть более конкретным, если он написан только для процессо…
18 ноя '10 в 10:09
0 ответов

Как затраты на атомарные операции варьируются в зависимости от архитектуры?

Как соотносятся затраты на атомарные операции в обычных архитектурах (x86(версия), arm(версия) и PowerPC(версия))? Бонусные баллы, если вы включили исходную оценку циклов и объяснили ее в терминах "Сортировка памяти C11" или включили инструкции, исп…
1 ответ

Как реализовать новый вид инструкции сравнения и обмена

Мне нужно реализовать (псевдокод) новый тип объекта сравнения и обмена (a,b) (CAS) (давайте назовем новый тип CAS2) . Объекты CAS и CAS2 поддерживают операцию чтения, которая возвращает значение объекта. Они оба поддерживают операцию сравнения и зам…
3 ответа

Поменять строки ячеек из 2 столбцов данных

Я изо всех сил, чтобы поменять значения из 2 столбцов данных кадра следующим образом: rs649071 rs640249 0.265 0.49 rs647621 rs640249 0.227 0.34 rs644339 rs640249 0.116 0.08 rs641563 rs640249 1.0 33.96 rs640249 rs11073074 0.248 0.77 rs640249 rs116373…
28 сен '12 в 21:46
3 ответа

Приведение указателя к изменчивой пустоте ** в C++

У меня достаточно приличные навыки C++, но этот актерский состав вызывал у меня проблемы. У меня есть функция, которая принимает следующие параметры: (volatile void **, void * , void*), у меня 3 int* переменные, и я пытаюсь передать их как (&var…
2 ответа

Это хороший дизайн для реализации Java синхронизированного ключевого слова в качестве объекта?

Просто для практики я хотел реализовать синхронизированное ключевое слово java как объект java. Вы сказали бы, что код ниже - хороший дизайн для этого? Я думаю, AtomicReference будет иметь аналогичную производительность для AtomicBoolean? Обновлен к…
1 ответ

Замки против сравнения и обмена

Я читал о методах без блокировки, таких как Compare-and-swap и использование классов Interlocked и SpinWait для достижения синхронизации потоков без блокировки. Я провел несколько собственных тестов, где у меня просто есть множество потоков, пытающи…
18 окт '13 в 22:17
1 ответ

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

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

Is OSCompareAndSwap immune to ABA problem like CMPXCHG8B?

Является ли OSCompareAndSwap невосприимчивым к проблеме ABA, как CMPXCHG8B?
19 мар '10 в 12:01
1 ответ

Смешивание легких транзакций и обычных записей в Cassandra

Документация Datastax для облегченных состояний транзакций: "В облегченных транзакциях используется механизм отметки времени, отличный от обычных операций, и смешивание LWT и обычных операций может привести к ошибкам. Если для записи в строку внутри…
01 апр '16 в 14:46
3 ответа

СлабыйСравнить AndSwap и сравнить AndSwap

Этот вопрос не о разнице между ними - я знаю, что такое ложный сбой и почему он происходит на LL/SC. У меня вопрос: если я использую Intel x86 и использую Java-9 (сборка 149), почему существует разница между их ассемблерным кодом? public class WeakV…
29 дек '16 в 14:46
5 ответов

Порядок с наименьшего и изменения позиции от другого Java-Arraylist

У меня есть два arraylist., один - целочисленный массив, а другой - строковый массив. Здесь мне нужно упорядочить значения целочисленного массива для сортировки от максимального значения к минимальному. в это время мне нужно также переместить позици…
01 июл '16 в 08:58
1 ответ

Блокировка свободной реализации стека в Python

Можно ли реализовать стек без блокировки в Python? Я искал в Интернете и не нашел функцию CAS в Python.
07 сен '15 в 23:37
1 ответ

Назначение возвращаемого значения атомарной функции

Я пытаюсь реализовать функцию барьера, так что когда поток вызывает waitBarrier() это будет ждать, пока все остальные n Потоки вызвали функцию, после которой все будет продолжаться, то есть своего рода конструкция синхронизации. У меня есть следующи…
1 ответ

Как понять этот механизм блокировки CCAS, используемый в АККА?

Я только что наткнулся на кусок кода в Акке. https://codereview.scala-lang.org/fisheye/browse/~raw,r=25521/scala-svn/scala/trunk/test/files/presentation/akka/src/akka/util/LockUtil.scala Основные методы, которые меня интересуют, перечислены ниже. /*…
05 сен '11 в 16:01
1 ответ

Как реализовать Valois' Queue с помощью C++11 CAS

Я хочу реализовать статью Дж. Д. Валуа " Реализация очередей без блокировки" с помощью атомарного CAS, предоставленного в C++11. Например, алгоритм Валуа определяет Enqueue функция: Enqueue(x) { q = new Record(); q->value = x; q->next = NULL; …
17 мар '18 в 03:19
1 ответ

Каким должен быть порядок памяти для последовательной загрузки атома, когда допустимы определенные ошибки

Предположим, что пользователь крутит ручку на MIDI-контроллере, и значения отправляются в мою программу в виде приращений и приращений к сохраненному значению. Поворот ручки в одну сторону пошлет серию уменьшений, их значение зависит от скорости вра…
30 янв '17 в 01:56
0 ответов

Реализация Mutex без аппаратной поддержки Test-and-Set и CAS-операций

Давайте получим следующее простое определение мьютекса: class Mutex { private: bool lock; public: void acquire(); void release(); Mutex() { lock = 0; } }; И следующее acquire() Реализация функции (с использованием операций сравнения и обмена): void …
22 окт '18 в 04:37
1 ответ

Атомарная инструкция: Как другой поток может обновить значение, когда выполняются инструкции сравнения и обмена?

Насколько я понимаю, любые атомарные инструкции (compare_and_swap, test_and_test, fetch_and_add) выполняются как одна инструкция. Хотя они включают в себя несколько циклов / операций ЦП, они невидимы для потока / процесса. Если поток выполняет любую…
1 ответ

Как реализованы условные переменные?

Это сбило меня с толку надолго. Учитывая базовые атомарные примитивы, такие как сравнение и своп, я вижу, как реализовать спин-блокировку (из которой я могу создавать мьютексы). Тем не менее, я не понимаю, как я могу построить условные переменные из…
23 фев '10 в 05:14