我在mysql中有一个存储过程,用于执行需要同步的任务,这样如果两个应用程序调用存储过程,只有一个可以访问一段代码来执行任务,保持另一个被阻塞直到第一个一个完成任务.
DELIMITER $$
CREATE PROCEDURE SP_GEN_ID(IN NAME VARCHAR(20))
BEGIN
DECLARE maxLen int default 0;
START TRANSACTION;
#the section of code that needs to be synchronized
COMMIT
END;
$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
因此,如果两个应用程序同时调用存储过程,则必须同步任务.
一个.但是启动TRANSACTION和COMMIT没有同步执行.
湾 并且LOCK TABLES tableA不能用于存储过程以确保同步.
C.我试图在应用程序级别同步存储过程调用.我用了
boost_interprocess scoped_lock lock();
它在1.41升级中运行得非常好
但是boost 1.34库不支持进程间锁定互斥锁,这是我的情况.
有没有办法同步代码的存储过程部分,以便在同时进行两次调用时,一个在另一个执行之前被阻塞?
(添加以下内容)编辑的代码:了解我在存储过程的synchronized块中尝试执行的操作.
它获取最后分配的id,并将其递增1并检查它是否未用于其他"名称"记录.找到有效的id后,更新最后分配的id记录表,然后将其与给定的"name"相关联.
DELIMITER $$
CREATE PROCEDURE SP_GEN_ID(IN NAME VARCHAR(20))
BEGIN
DECLARE maxLen int default 0;
START TRANSACTION;
#the section of code that needs to be synchronized
SELECT lastid into …Run Code Online (Sandbox Code Playgroud) mysql synchronization stored-procedures locking boost-interprocess