我正在从工作表中读取数据,并希望在我的过程中实现单例,以便可以一次运行一次读取功能。但是我知道我无法使用单例来做到这一点,所以如何在不使用互斥或信号量的情况下做到这一点。
我已经为该类编写了代码,该类调用该类并设置一个静态变量,然后调用该函数以检查其是否具有该类,因此如果该类存在,则不要运行read函数。
class DataParser extends config {
private static $_instance = false;
public static
function getInstance() {
if (self::$_instance == false) {
print_r("expression");
self::$_instance = true;
return self::$_instance;
}
return false;
}
function __construct($params) {}
}
$dataParser = new DataParser($confData);
$p = DataParser::getInstance();
if ($p) {
$res = $dataParser - > read();
}
我想一次运行一次读取功能,如果一个读取正在运行,则另一读取将无法使用php运行不想使用互斥量或信号量
答案 0 :(得分:0)
您是否在应用程序中使用数据库?阅读器任务是在分布式环境中运行还是始终在同一服务器上运行?我建议调查咨询锁定。 MySQL和PHP都支持。
使用PHP中的文件专有锁定,看起来像这样。
class DataParser extends config {
private static $_instance = false;
public static
function getInstance() {
if (self::$_instance == false) {
print_r("expression");
self::$_instance = true;
return self::$_instance;
}
return false;
}
function __construct($params) {}
}
$dataParser = new DataParser($confData);
$p = DataParser::getInstance();
$fp = fopen("/tmp/.lock", "r+");
if ($p && flock($fp, LOCK_EX)) {
$res = $dataParser->read();
flock($fp, LOCK_UN);
} else {
// Skip silently or do something else?
}
fclose($fp);
答案 1 :(得分:0)
启动脚本后,您可以简单地创建一个空文件,然后在此之前检查该文件是否存在。 然后在脚本结尾处将其删除。