Size: a a a

2021 October 31

FO

FORTRAN ONE LOVE in codingteam
А то как раз и получается деблок
источник

FO

FORTRAN ONE LOVE in codingteam
*дедлок
источник

Dv

Dr. Friedrich von Ne... in codingteam
А если нету предыдущего?
источник

c

codingteam@cjr in codingteam
Minoru
ок, да, не совсем так, как в классической задаче, но challenge тот же: нельзя взять все три лока сразу, а если брать поодиночке, то может получаться ерунда
источник

Dv

Dr. Friedrich von Ne... in codingteam
Скажем, ты первый
источник

Dv

Dr. Friedrich von Ne... in codingteam
Не, вроде тут проще.
источник

FO

FORTRAN ONE LOVE in codingteam
Тогда начинать с себя
источник

Dv

Dr. Friedrich von Ne... in codingteam
Щас нам Фокстран схему опишет.
источник

c

codingteam@cjr in codingteam
Minoru
«предыдущий, себя, следующий» выглядит работоспособно
источник

Dv

Dr. Friedrich von Ne... in codingteam
Да.
источник

FO

FORTRAN ONE LOVE in codingteam
Если брать предыдущего (если есть), потом себя, потом последущего поочередно, то дедлоков не будет.
Т.к. если следующий за нами пытается лочиться, то он захватит нас (если у нас нет блокировки) и тогда мы отдыхаем, а если мы работаем, то он не может захватить нас... Но мы удалимсч и в таком случае снова надо будет обновить индекс предыдущего для последующего
источник

c

codingteam@cjr in codingteam
Minoru
м, вот кстати да. Получается, что если кто-то ждёт лока, то после его получения он должен перепроверить, что элемент под локом за это время не удалился
источник

FO

FORTRAN ONE LOVE in codingteam
В общем вопрос только как обновить индекс предыдущего для последующего, если мы выпилились пока последующий пытался нас залочит
источник

Dv

Dr. Friedrich von Ne... in codingteam
Мне казалось, мы лок затем и делаем, чтоб никто не удалил.
источник

FO

FORTRAN ONE LOVE in codingteam
*залочить
источник

Dv

Dr. Friedrich von Ne... in codingteam
Если он хотел удалить, то будет ждать, пока мы разрешим.
источник

FO

FORTRAN ONE LOVE in codingteam
Нет. Мы делаем лок, чтобы привязки правильно совершились
источник

c

codingteam@cjr in codingteam
Minoru
> <@fvnever> Мне казалось, мы лок затем и делаем, чтоб никто не удалил.

представь, что мы удаляем ноду и взяли все три лока. В этот момент кто-то другой хочет удалить следующую ноду, и виснет на локе той, которую мы удаляем. Мы перелинкуем указатели, удаляем свою ноду и освобождаем локи. Тот второй тред наконец-то получает лок *на уже удалённую* ноду, берёт лок на себя и на следующего, линкует следующего *к уже удалённой ноде*, удаляет текущую и освобождает локи. В итоге имеем список, который можно пройти с начала в конец, но нельзя пройти из конца в начало (потому что обратная ссылка указывает на уже не существующую ноду)
источник

Dv

Dr. Friedrich von Ne... in codingteam
Вот блин.
источник

FO

FORTRAN ONE LOVE in codingteam
А зачем обратная ссылка?(-:
источник