SQLite学习之路⑪ 请求锁和销毁锁(2021SC@SDUSC)

SQLite 学习之路 第十一节 请求锁和销毁锁

请求互斥锁,sqlite3_mutex_enter()导致阻塞,sqlite3_mutex_try()返回SQLITE_BUSY。sqlite3_mutex_enter() 和 sqlite3_mutex_try()例程尝试键入一个互斥锁,如果另一个线程已经拥有这个互斥锁,sqlite3_mutex_enter()将阻塞,sqlite3_mutex_try()将返回SQLITE_BUSY,一旦成功键入, sqlite3_mutex_try() 接口将返回SQLITE_OK。被创建的互斥锁使用SQLITE_MUTEX_RECURSIVE可以被相同的线程多次键入。在这样的情况下,在另一个线程进入之前,互斥锁必须退出相同的次数。

sqlite3_mutex_try()例程很少被使用,仅仅是它被作为一种优化的时候被使用,因此该例程总是调用失败是正常的。TryEnterCriticalSection()接口只能在WinNT上可用,在 Win98系统的基础上,如果你尝试在没有预先做一些 #defines 定义的情况下使用该例程来阻止SQLite,一些windows编译器会控诉这种行为。出于这个原因,我们将省略这种优化。

请求互斥锁,sqlite3_mutex_enter()导致阻塞:

static void winMutexEnter(sqlite3_mutex *p){
   
#ifdef SQLITE_DEBUG
  DWORD tid = GetCurrentThreadId();
  assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
#endif
  EnterCriticalSection(&p->mutex);
#ifdef SQLITE_DEBUG
  assert( p->nRef>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值