Lock free algorithm question
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Marmot
- Графоман
- Сообщения: 39328
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Lock free algorithm question
Народ, может кто знает, никак найти не могу:
Есть 2 CAS переменные, надо сделать одновременный CAS на обе, как?
Есть 2 CAS переменные, надо сделать одновременный CAS на обе, как?
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Lock free algorithm question
если они 4 байтовый то можно сделать один 8 байтовый cas а в общем чегой то не припоминается такого трюка правда я не очень долго про ети алгоритмы читал
- Marmot
- Графоман
- Сообщения: 39328
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Lock free algorithm question
А оне у меня независимые, типа есть 100К переменных, из ин их случайно(почти) выбирается пара над которой надо сделать совместный CAS...aissp писал(а):если они 4 байтовый то можно сделать один 8 байтовый cas а в общем чегой то не припоминается такого трюка правда я не очень долго про ети алгоритмы читал
Блин, написали всего столько про lock free алгоритмы, а такого простого случая даже никто не рассматривал

Или это в принципе невозможно...
-
- Частый Гость
- Сообщения: 13
- Зарегистрирован: 12 дек 2008, 16:19
Re: Lock free algorithm question
Вот что нашел - даже для >2 переменных, но довольно хитро http://citeseerx.ist.psu.edu/viewdoc/su ... .1.13.7938
- Marmot
- Графоман
- Сообщения: 39328
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Lock free algorithm question
Мдя..., это называется не хитро,а через жопу, ну да ладно, бум читать и думать...Anton писал(а):Вот что нашел - даже для >2 переменных, но довольно хитро http://citeseerx.ist.psu.edu/viewdoc/su ... .1.13.7938

Спасибо.
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Lock free algorithm question
я тут подумал немножко так. а ты вполне уверен что лок фрее ето то что надо в такой ситуации? из моей чисто практики, лок фрее надо использовать с бесовской осторожностью, получить код который кроме автора никто понять не может как два байта переслать. Впрочем если ето цель
(я для себя использование ограничил очень локальными задачами типа доюавление в очередь)

- Marmot
- Графоман
- Сообщения: 39328
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Lock free algorithm question
X3 если честно, только после разгребания дедлока из выстроившихся в стройную цепочку 4 потоков мне это все надоело...aissp писал(а):я тут подумал немножко так. а ты вполне уверен что лок фрее ето то что надо в такой ситуации? из моей чисто практики, лок фрее надо использовать с бесовской осторожностью, получить код который кроме автора никто понять не может как два байта переслать. Впрочем если ето цель(я для себя использование ограничил очень локальными задачами типа доюавление в очередь)

Проблема в то, что у меня многопоточный скриптинг, ограничить который очень сложно, либо очень coarse grained locking с потерей производительности, либо дедлоки эти сумашедшие...

А заставлять скриптологов думать о локах и потоках, то не для этого все это делается, а совсем даже наоборот

- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Lock free algorithm question
стало яснее. май опинион, я бы забыл о лок фрее в такой ситуации. по результату сообщи интересно 

- sobomax
- Маньяк
- Сообщения: 3699
- Зарегистрирован: 29 июн 2006, 22:53
- Откуда: Vancouver
Re: Lock free algorithm question
IMHO не нужен тебе lock free. Поставь spin lock на весь массив из 100K переменных и обменяй те две что тебе надо "без шуму и пыли". Если у тебя меньше чем десять тысяч тридов и триды делают что-либо еще кроме обмена переменными то подобный лок в 99.9999% случаев срабатывать не будет а значит потери производительности тоже никакой не произойдет.Marmot писал(а):А оне у меня независимые, типа есть 100К переменных, из ин их случайно(почти) выбирается пара над которой надо сделать совместный CAS...aissp писал(а):если они 4 байтовый то можно сделать один 8 байтовый cas а в общем чегой то не припоминается такого трюка правда я не очень долго про ети алгоритмы читал
Блин, написали всего столько про lock free алгоритмы, а такого простого случая даже никто не рассматривал
Или это в принципе невозможно...
-Maxim
- Marmot
- Графоман
- Сообщения: 39328
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Lock free algorithm question
Неа, те две, это только упрощенное по самое нехочу требование дял формулировки вопросаsobomax писал(а):IMHO не нужен тебе lock free. Поставь spin lock на весь массив из 100K переменных и обменяй те две что тебе надо "без шуму и пыли". Если у тебя меньше чем десять тысяч тридов и триды делают что-либо еще кроме обмена переменными то подобный лок в 99.9999% случаев срабатывать не будет а значит потери производительности тоже никакой не произойдет.Marmot писал(а):А оне у меня независимые, типа есть 100К переменных, из ин их случайно(почти) выбирается пара над которой надо сделать совместный CAS...aissp писал(а):если они 4 байтовый то можно сделать один 8 байтовый cas а в общем чегой то не припоминается такого трюка правда я не очень долго про ети алгоритмы читал
Блин, написали всего столько про lock free алгоритмы, а такого простого случая даже никто не рассматривал
Или это в принципе невозможно...
-Maxim

- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Lock free algorithm question
еще одна возможность, выташить переменную из списка можно лок фри. вытаскиваешь обе делаешь с ними что надо вставляешь в зад
- Marmot
- Графоман
- Сообщения: 39328
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Lock free algorithm question
А что должен делать поток, которуму в это время тоже нужна одна, или обе из эти переменных?aissp писал(а):еще одна возможность, выташить переменную из списка можно лок фри. вытаскиваешь обе делаешь с ними что надо вставляешь в зад
ждать?
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Lock free algorithm question
вставлять новые или искать их (ето так просто фантазии
)
без лок фри ето рещается следующим образом. лок всей таблицы, получение пойнтеров с каунтером типа shared_ptr (чтобы ни одна собака не потрела) на интересуюшие переменные, отпускание лока таблицы, лок переменных в порядке от меньшего к большему.

без лок фри ето рещается следующим образом. лок всей таблицы, получение пойнтеров с каунтером типа shared_ptr (чтобы ни одна собака не потрела) на интересуюшие переменные, отпускание лока таблицы, лок переменных в порядке от меньшего к большему.
- Marmot
- Графоман
- Сообщения: 39328
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Lock free algorithm question
Ну да, ну да, только вот выбор переменных делается скриптом на основе их значений.aissp писал(а):вставлять новые или искать их (ето так просто фантазии)
без лок фри ето рещается следующим образом. лок всей таблицы, получение пойнтеров с каунтером типа shared_ptr (чтобы ни одна собака не потрела) на интересуюшие переменные, отпускание лока таблицы, лок переменных в порядке от меньшего к большему.
Т.е. если запускать скрипт без лока, то до момента его, лока захвата, эти значения могут тысячу раз изменится и изменения будут бесмысленны.
Ну а если запускать скрипт в локе, то все встанет.
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Lock free algorithm question
ну так не тяни вола - публикуй всю задачу
обещаю идею непатентовать 

