запрос в базу данных.
Мне надо сделать что-то вроде:
lock("someid")
query()
unlock("someid")
Чтобы избежать ситуации с созданием deadlock'а в базе данных.
Как я могу такое реализовать?
Для этого в DB есть механизм транзакций, чтобы ничего не поломалось когда не хочется.
Ну просить базу это разруливать получается дольше по времени и более нагруженно по логике. Монговский драйвер не умеет повторять запрос и это придется делать в ручную. По этому я бы хотел просто блокировать поток на такой случай
Ну тогда Mutex'ы, они работают везде идеологически одинаково. В Rust просто сделано красивее и с защитой от склеротиков.
А можно поподробнее что за потоки и что за запросы?
Мне балансы пользователей менять надо
Select for update. БД все бля блокировок уже предоставляет
Есть транзакционные базы данных. Открываешь транзакцию, делаешь изменения, коммитишь. Другие способы пока как ни странно не видел
Ничего не делай. Просто выбери в субд подходящий твоему случаю уровень изоляции транзакций и работай дальше не парясь о локах, семафорах, мьютексах и прочей чепушне.
в постгрес знаю точно есть транзакции. В случае чего можно роллбеком откатить ее
Обсуждают сегодня