|
|
SQLite数据库用来处理锁定情况的两个函数
( 2008/6/20 09:36 )
SQLite数据库在使用的过程中经常发生的数据库异常便是数据库被锁定了(SQLITE_BUSY或者SQLITE_LOCKED)。SQLite对于并发的处理机制是允许同一个进程的多个线程同时读取一个数据库,但是任何时刻只允许一个线程/进程写入数据库。所以必须要对数据库的读写来进行控制。 SQLite数据库本身用来处理锁定情况的两个函数: int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*); int sqlite3_busy_timeout(sqlite3*, int ms); 使用这两个函数可以设定当发生数据库锁定的时候,调用什么函数来处理,以及设定锁定时的等待时间。 当然通常情况下我们还可以用另外一种方法来解决这类问题,那便是设置互斥量。一般情况下我们可以使用互斥量,临界区等来实现。在这里我使用了互斥量,主要是因为我需要在多个不同的进程中并发的访问同一个数据库。用于锁定和解锁的函数如下: void Lock() { if((hCounter = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"kangxiaofang")) == NULL) { //如果没有其他进程创建这个互斥量,则重新创建 hCounter = CreateMutex(NULL,FALSE,"kangxiaofang"); WaitForSingleObject(hCounter,INFINITE); } else { WaitForSingleObject(hCounter,INFINITE); } } void UnLock()
ReleaseMutex(hCounter); //关闭句柄 CloseHandle(hCounter); } 当然我们也可以把等待时间设定为60秒,以免出现死等的现象。具体使用时可以按如下调用: //锁定数据库
UnLock(); 总结: 经过测试后,你会发现这种方法所需的消耗要小于循环打开数据库的操作。
|
·在控制中心点选数据库时出现的SQL1031N问题 (8-22) ·详细讲解Sybase数据库乱码问题的解决方法 (8-22) ·在控制中心点选数据库时出现的SQL1031N问题 (8-19) ·SQL Server数据库管理员必备的DBCC命令 (8-19) ·讲解SQL Server数据库被挂马的解决方案 (8-19) 热议文章·专家呼吁出台《电信法》以制衡恶性博弈 (8-19) 评:运营商各自为战,竞争过分最终会害自己! ·3G发牌猜想:三家运营商将同领TD牌照? (8-19) ·国资委人士:央企重组不需商务部反垄断审查 (8-5) ·实名制应尽早全国实行 (8-4) ·李进良:中移动应实现G网用户携号转向TD (7-31) ·华为上半年增收50%达122亿美元 (7-30) ·ITU制定相关标准移动通信有望互联网化 (7-30) ·数据中心服务器机柜对综合布线产品的需求 (8-22) ·数据中心布线系统的设计与施工技术 (8-22) ·网络数字电视的实现方法与关键技术 (8-22) ·EPON技术及组网应用研究 (8-22) ·如何在数据中心里应用多模光纤连接? (8-22) ·AM/FM收音机耳机环形天线 (8-22) |
|||||||||||||||
|