Блог понаехавшего | шо?

TAG | memcached queue

Jul/08

23

Очередь на memcached

memcached очень интересная и быстрая вещь, но попытки реализовать на нём очередь/стек терпели неудачу из-за ситуации гонок.
Я должен получить последний элемент (А) и дописать следующий. Но я не уверен, будет ли элемент А последним на момент записи следующего.
Получалась такая ситуация:

(1-й процесс) $m->get(‘last’);
(2-й процесс) $m->get(‘last’);

(1-й процесс) $m->set(‘last’=>$modified_last);
(2-й процесс) $m->set(‘last’=>$modified_last); #превед!!

Вариант решения проблемы

# добавление в очередь
my $tail=$m->incr(‘tail’);
$m->set(“queue_$tail”=>$data);
# удаление из неё:
my $head=$m->incr(‘head’)-1;
$m->get(“queue_$tail”);

Может быть я перепутал с голову с хвостом, но этот вариан не боится ситуации гонок.

Hide

Find it!

Theme Design by devolux.org