【发布时间】:2023-03-24 10:09:02
【问题描述】:
我正在尝试更新 APC 中的变量,并且会有很多进程尝试这样做。
APC 不提供锁定功能,所以我正在考虑使用其他机制……目前我发现的是mysql 的GET_LOCK() 和php 的flock()。还有什么值得考虑的吗?
更新:我找到了 sem_acquire,但它似乎是一个阻塞锁。
【问题讨论】:
-
变量包含什么,确切地说;你为什么担心锁定?您或许可以解决该问题。
-
一个(迟到的)警告词:MySQL GET_LOCK() 有一个非常危险的行为。第二个 GET_LOCK() 悄悄地释放同一连接上的前一个锁。 MySQL 每个连接只能持有一个锁。使用股票 MySQL 是不可能使用嵌套锁的。它不应该用于通用锁定。
-
在 MySQL 5.7 中,get_lock 已经解决了上面提到的问题,所以你可以像现在期望的那样使用它:dev.mysql.com/doc/refman/5.7/en/locking-functions.html