Вы не зашли.
Главная » PHP » Задача синхронизации потоков.
#1. TLENS Off (14)
Moderator
2013.06.05 21:09
1) Задача - есть класс "А" и куча обьектов этого класса. Каждый обьект хранится в memcache сервере. В каждого обьекта есть переменная типа булеан (работающий/приостановлен) нам нужно постоянно использовать обьект под номером 1 пока не придется его заблокировать после мы переключаемся на обьект номер 2 и работаем через него.
Решение 1:
    Пишем в память переменную хранящую номер активного обьекта и в случае блокировки первого мы делаем инкремент этого поля.
Проблема 1:
    Если с объектом работает одновременно несколько потоков может быть непредвиденное поведение программы например многократный инкремент так как допустим в 5 потоков загрузится первый обьект и 5 раз сработает блок что приведет к увеличению переменной с номером работающего обьекта на 5 раз а в теории нам надо всего то одно увеличения.
Решение 2:
    В каждом обьекте хранить последнее время успешного использования и время последней блокировки и каждый раз перебирать все обьекты вычисляя тот который давнее всех был заблокирован.
Проблема 2:
    Эта задача будет выполнятся десятки а то и сотни раз в секунду да и обьектов может быть сотни а то и больше. И каждый раз сгружать их в память для перебора не выход.
Это все не то. Что вы можете посоветовать для поочередного использования обьектов в многопоточной среде?
#2. Gemorroj Off (107)
Administrator
2013.06.05 22:10
как реализована многопоточность?
#3. TLENS Off (14)
Moderator
2013.06.05 22:10
Обычный php скрипт запускаемый одновременно несколько раз обращаются к одной переменной которая хранится в мемкеше
#4. Gemorroj Off (107)
Administrator
2013.06.05 23:11
TLENS, ну не храни ее в мемкеше)
#5. TLENS Off (14)
Moderator
2013.06.06 12:12
А где тогда? в файле? Какая разница?
#6. Gemorroj Off (107)
Administrator
2013.06.06 16:04
прочитал еще раз.
так а если инкрементить и блочить ДО использования объекта. т.е. каждому инстансу будет выдан новый объект.
#7. TLENS Off (14)
Moderator
2013.06.06 20:08
В том то и дело что нужно что бы все использовать только один объект.
#8. tipsun Off (19)
Moderator
2013.06.13 21:09
Может быть нужно как-то идентифицировать объекты, чтоб определенный номер объекта + 1.
Даже если одновременно используются, то получится не + 1, а именно текущий номер объекта + 1.
Извиняюсь, если чушь.
Страниц: 1
Главная
WEB
PunBB Mod v0.6.2
0.015 s