#1.
TLENS
Off
(14)
Moderator
2013.06.05 21:09
1) Задача - есть класс "А" и куча обьектов этого класса. Каждый обьект хранится в memcache сервере. В каждого обьекта есть переменная типа булеан (работающий/приостановлен) нам нужно постоянно использовать обьект под номером 1 пока не придется его заблокировать после мы переключаемся на обьект номер 2 и работаем через него.
Решение 1:
Пишем в память переменную хранящую номер активного обьекта и в случае блокировки первого мы делаем инкремент этого поля.
Проблема 1:
Если с объектом работает одновременно несколько потоков может быть непредвиденное поведение программы например многократный инкремент так как допустим в 5 потоков загрузится первый обьект и 5 раз сработает блок что приведет к увеличению переменной с номером работающего обьекта на 5 раз а в теории нам надо всего то одно увеличения.
Решение 2:
В каждом обьекте хранить последнее время успешного использования и время последней блокировки и каждый раз перебирать все обьекты вычисляя тот который давнее всех был заблокирован.
Проблема 2:
Эта задача будет выполнятся десятки а то и сотни раз в секунду да и обьектов может быть сотни а то и больше. И каждый раз сгружать их в память для перебора не выход.
Это все не то. Что вы можете посоветовать для поочередного использования обьектов в многопоточной среде?
#8.
tipsun
Off
(19)
Moderator
2013.06.13 21:09
Может быть нужно как-то идентифицировать объекты, чтоб определенный номер объекта + 1.
Даже если одновременно используются, то получится не + 1, а именно текущий номер объекта + 1.
Извиняюсь, если чушь.