Size: a a a

2021 May 25

c

codingteam@cjr in codingteam
Minoru
ну и ограничение на то, что группы не пересекаются, делает всю эту схему почти бесполезной
источник

c

codingteam@cjr in codingteam
portnov
т.е. захватываем их в определённом порядке когда нам надо, а потом отпускаем все сразу когда уже всё сделали (ну, какую-то транзакцию прикладную)
источник

AE

Alexander Evstafev in codingteam
Ну тут пишут очень много, я не могу столько читать
источник

c

codingteam@cjr in codingteam
portnov
есть ощущение что не зря в RDBMS нельзя по-другому сделать
источник

t

ttldtor in codingteam
Ггг
источник

AE

Alexander Evstafev in codingteam
в целом если бы я сидел только тут, я бы успевал, конечно
источник

t

ttldtor in codingteam
Меня раздражает, что простые вещи требуют доп крейтов
источник

t

ttldtor in codingteam
Хочешь попросить на ставить теги?)
источник

t

ttldtor in codingteam
Я завёл цодингтимовский стек оверфлоу)
источник

c

codingteam@cjr in codingteam
Minoru
portnov: я не смог придумать жизненный пример для моего примера с двумя локами, так что ты наверняка прав — в жизни такими схемами страдают только те, у кого потом случаются дедлоки :)
источник

c

codingteam@cjr in codingteam
Minoru
ну, или у меня фантазии нет просто
источник

c

codingteam@cjr in codingteam
portnov
дедлоков ещё можно избегать, если в некоторых случаях использовать lock() с нулевым таймаутом, а собственно таймаут реализовывать программно (спинлок)
источник

c

codingteam@cjr in codingteam
portnov
но там получается эдакий священный код, который можно трогать только тому кто очень хорошо понимает как это работает
источник

c

codingteam@cjr in codingteam
portnov
ну т.е. идея-то простая, если есть поток1, захвативший А и Б, и есть поток 2, захвативший Б, то если он попробует сделать lock(A, timeout=0), ему просто вернётся "не получилось" вместо дедлока, и это можно умно обработать
источник

c

codingteam@cjr in codingteam
Minoru
ага, int i = 0; while (lock(A, timeout=0) != 0) pthread_kill(i++);
источник

c

codingteam@cjr in codingteam
Minoru
всё по учебнику: цикл есть — значит спинлок
источник

c

codingteam@cjr in codingteam
portnov
угу. Просто в реальном коде, когда несколько блокировок, и берутся они не в одном месте кода, становится надо понимать, где мы берём обычный лок, где спинлок, почему именно и что будет если это поменять
источник

c

codingteam@cjr in codingteam
Minoru
я пока ещё не дорос до всего этого, кажется :)
источник

c

codingteam@cjr in codingteam
portnov
я один раз такое написал и больше не хочу :)
источник

c

codingteam@cjr in codingteam
portnov
по крайней мере, в business-critical задачах
источник