我发现正在使用的Java应用程序中使用MariaDB的GET_LOCK(‘lockname’, 0)
。
超时值在此处用作0。我想,它应该以非阻塞方式工作。但是,在日志文件中遇到一些异常之后,我有一种印象,即它仍在尝试使用默认超时时间来获取锁。在IS_FREE_LOCK(‘lockname’)
调用之前应用GET_LOCK
调用可使应用程序平稳运行。
我的问题是,在这里使用0作为超时值会有什么影响?
最佳答案
您确定超时了吗?我无法从命令行重现该问题:
第一场:
MariaDB [(none)]> SELECT GET_LOCK('lock1', 10);
+-----------------------+
| GET_LOCK('lock1', 10) |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.000 sec)
第二场:
MariaDB [(none)]> SELECT GET_LOCK('lock1', 0.5);
+------------------------+
| GET_LOCK('lock1', 0.5) |
+------------------------+
| 0 |
+------------------------+
1 row in set (0.500 sec)
MariaDB [(none)]> SELECT GET_LOCK('lock1', 0);
+----------------------+
| GET_LOCK('lock1', 0) |
+----------------------+
| 0 |
+----------------------+
1 row in set (0.000 sec)