sobomax писал(а):Marmot писал(а):Неа, те две, это только упрощенное по самое нехочу требование дял формулировки вопроса

, на самом деле там таких обменов может быть мама негорюй, так что глобальный лок это несерьезно. Главная проблема в том, что решение что и как менять принимается в скриптах, на которые накладываются только очень небольшие ограничения. Т.е. или скрипты выполнять в (почти)глобальном локе, и тогда они просто все остановят, либo разбрасывать мелкие локи внутри и снаружи скриптов вокруг критичных операций с риском влетететь в дедлок ну или делать lock free...
Короче похоже ты сам не очень понимаеш зачем и как работают lock free algorithms и как их применить к поставленной задаче.
Типа ищется некая волшебная палочка которая сразу все разрулит. Согласен с aissp - high-level описание задачи в студию.
-Maxim
Короче, пишется онлайн игруха, грубо говоря на полу стоят баночки, с конфетками, монетками и прочей хренотенью.
Емкость баночек ограничена. Кто угодно может одновременно класть, вынимать и перекладывать предметы из баночек.
Вся логика манипулюций с баночками сделана на скриптах
Например, как сделано lock free поедание 5 конфеток из баночки с 6ю конфетками.
- проверяем и запоминаем скока конфеток было, это делает скрипт
- вычисляем скока должно остаться , и это тоже делает скрипт
- делаем CAS, если в баночке уже не 6 конфеток запускаем всю логику поновой
С одной баночкой все просто
А если надо переложить 80 монеток из баночки с 85 монетками в баночку с 15 монетками, при ограничении, что в баночке не может быть больше 100 монеток

, вот тут-то и хочется сделать двойной CAS
И не забываем, что доступ к баночкам есть у нескольких тысяч игроков, и они одновременно, соревнуются за доступ к ресурсам, т.е. с большой долей вероятности они будут пытаться иметь дело с одними и теми же баночками

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