Vladislavik
Новичок
Параллельные потоки.
<?php
$time=time();
mysql_query("LOCK TABLES `base` WRITE;");
$sql=mysql_query("SELECT `timestamp` FROM `base` WHERE `id`='1' FOR UPDATE");
$stime=mysql_fetch_array($sql);
if($stime['timestamp']>=$time)
{}else
{
if($stime['timestamp']+30>=$time)
{}else
{
mysql_query("UPDATE `base` SET `timestamp`='".$time." WHERE `id`='1'");
//Полезная работа;
}
}
mysql_query("UNLOCK TABLES");
?>
Имеется таблица MyIsam.
Иногда случается ситуация, при которой практически одновременно 2 или более юзеров запускают скрипт и запрашивают timestamp, и происходит UPDATE timestamp'а и, соответственно, несколько раз выполняется "полезная работа".
Как избежать такой ситуации? Испробовал, как видно все и транзакции, и FOR UPDATE, и проверку на то, что timestamp больше time(). Все равно иногда обновление timestamp выполняется 2 а то и три раза.
<?php
$time=time();
mysql_query("LOCK TABLES `base` WRITE;");
$sql=mysql_query("SELECT `timestamp` FROM `base` WHERE `id`='1' FOR UPDATE");
$stime=mysql_fetch_array($sql);
if($stime['timestamp']>=$time)
{}else
{
if($stime['timestamp']+30>=$time)
{}else
{
mysql_query("UPDATE `base` SET `timestamp`='".$time." WHERE `id`='1'");
//Полезная работа;
}
}
mysql_query("UNLOCK TABLES");
?>
Имеется таблица MyIsam.
Иногда случается ситуация, при которой практически одновременно 2 или более юзеров запускают скрипт и запрашивают timestamp, и происходит UPDATE timestamp'а и, соответственно, несколько раз выполняется "полезная работа".
Как избежать такой ситуации? Испробовал, как видно все и транзакции, и FOR UPDATE, и проверку на то, что timestamp больше time(). Все равно иногда обновление timestamp выполняется 2 а то и три раза.
