【发布时间】:2008-09-17 10:02:24
【问题描述】:
我正在使用 mysql++ 连接到 MySQL 数据库以执行一堆数据查询。由于我正在读取的表不断被写入,并且我需要一致的数据视图,我首先锁定表。但是,MySQL 在其锁定查询中没有“NOWAIT”的概念,因此如果表被其他东西锁定了很长时间,我的应用程序就会坐在那里等待。我想要它做的是能够返回并说“无法获得锁定”之类的内容,然后在几秒钟内重试。我对这个超时的一般尝试如下。
如果我在将表锁定在数据库后运行它,我会收到超时已命中的消息,但我不知道如何让 mysql_query 行终止。如有任何帮助/想法,我将不胜感激!
volatile sig_atomic_t success = 1;
void catch_alarm(int sig) {
cout << "Timeout reached" << endl;
success = 0;
signal(sig,catch_alarm);
}
// connect to db etc.
// *SNIP
signal (SIGALRM, catch_alarm);
alarm(2);
mysql_query(p_connection,"LOCK TABLES XYZ as write");
【问题讨论】: