Как блокировать поток на время выполнения SQL запроса
-
Я использую модуль SQL с базой данных mysql. Беру строку из таблицы с минимальной датой. Типа такого:
SELECT * FROM table ORDER BY update_time ASC LIMIT 1
и затем пишу текущее время:
UPDATE table SET update_time=[[TIME]] WHERE id=[[ID]]
После апдейта я уверен, что строка повторно возьмется в самом конце (данные в моем кейсе должны браться по кругу).
Но часто все равно хватает времени, чтобы несколько потоков взяли одну и ту же строку.SELECT ... FOR UPDATE
приводит к ошибке таймаута.
Как блокировать остальные потоки на время выполнения этих двух запросов?
-
@thepappo said in Как блокировать поток на время выполнения SQL запроса:
Как блокировать остальные потоки на время выполнения этих двух запросов?
Ищите на форуме пример реализации блокировки потоков через глобальную переменную для работы с буфером обмена.
-
@Fox я видел ваш ответ в соседней ветке и искал полчаса, но что-то так найти и не смог (
-
@thepappo said in Как блокировать поток на время выполнения SQL запроса:
@Fox я видел ваш ответ в соседней ветке и искал полчаса, но что-то так найти и не смог (
https://community.bablosoft.com/topic/4672/hello-need-a-little-help/5
-
Спасибо. А отдельные функции нельзя блокировать? Имею в виду, что через глобальную переменную в данной реализации блокируются все остальные потоки независимо от тех действий, которые они выполняют в данный момент. А нельзя ли сделать, чтобы потоки одновременно не выполняли конкретную функцию, а если находятся вне этой функции, то продолжали работу? Я знаю, что вряд ли, но вдруг )
-
@thepappo said in Как блокировать поток на время выполнения SQL запроса:
Спасибо. А отдельные функции нельзя блокировать? Имею в виду, что через глобальную переменную в данной реализации блокируются все остальные потоки независимо от тех действий, которые они выполняют в данный момент. А нельзя ли сделать, чтобы потоки одновременно не выполняли конкретную функцию, а если находятся вне этой функции, то продолжали работу? Я знаю, что вряд ли, но вдруг )
Можно. Смотрите тестовый скрипт, там максимально просто всё сделано
-
@Fox я затупил, там и блокируется то что нужно. Пора спать видимо.