#1 2013.06.05 21:37

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Задача синхронизации потоков.

1) Задача - есть класс "А" и куча обьектов этого класса. Каждый обьект хранится в memcache сервере. В каждого обьекта есть переменная типа булеан (работающий/приостановлен) нам нужно постоянно использовать обьект под номером 1 пока не придется его заблокировать после мы переключаемся на обьект номер 2 и работаем через него.
Решение 1:
    Пишем в память переменную хранящую номер активного обьекта и в случае блокировки первого мы делаем инкремент этого поля.
Проблема 1:
    Если с объектом работает одновременно несколько потоков может быть непредвиденное поведение программы например многократный инкремент так как допустим в 5 потоков загрузится первый обьект и 5 раз сработает блок что приведет к увеличению переменной с номером работающего обьекта на 5 раз а в теории нам надо всего то одно увеличения.
Решение 2:
    В каждом обьекте хранить последнее время успешного использования и время последней блокировки и каждый раз перебирать все обьекты вычисляя тот который давнее всех был заблокирован.
Проблема 2:
    Эта задача будет выполнятся десятки а то и сотни раз в секунду да и обьектов может быть сотни а то и больше. И каждый раз сгружать их в память для перебора не выход.
Это все не то. Что вы можете посоветовать для поочередного использования обьектов в многопоточной среде?

Неактивен

#2 2013.06.05 22:23

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Задача синхронизации потоков.

как реализована многопоточность?

Неактивен

#3 2013.06.05 22:29

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Задача синхронизации потоков.

Обычный php скрипт запускаемый одновременно несколько раз обращаются к одной переменной которая хранится в мемкеше

Неактивен

#4 2013.06.05 23:34

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Задача синхронизации потоков.

TLENS, ну не храни ее в мемкеше)

Неактивен

#5 2013.06.06 12:37

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Задача синхронизации потоков.

А где тогда? в файле? Какая разница?

Неактивен

#6 2013.06.06 16:23

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Задача синхронизации потоков.

прочитал еще раз.
так а если инкрементить и блочить ДО использования объекта. т.е. каждому инстансу будет выдан новый объект.

Неактивен

#7 2013.06.06 20:50

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Задача синхронизации потоков.

В том то и дело что нужно что бы все использовать только один объект.

Неактивен

#8 2013.06.13 21:40

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Задача синхронизации потоков.

Может быть нужно как-то идентифицировать объекты, чтоб определенный номер объекта + 1.
Даже если одновременно используются, то получится не + 1, а именно текущий номер объекта + 1.
Извиняюсь, если чушь.

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.009 s