发明名称 一种数据库中自旋锁的实现方法
摘要 本发明公开了一种数据库中自旋锁的实现方法,其特征在于,一种数据库中自旋锁的实现方法,其特征在于,在共享内存中存储两个全局变量,一个是自旋锁变量,另一个是ID变量,系统初始化时两个变量被初始化为0;采用自旋锁变量高位存储值来记忆当前已持自旋锁线程,并根据该存储值在持锁线程异常退出导致死锁时,实现自旋锁自动解锁。本发明避免出现上述多个任务竞争同一个自旋锁时可能出现的死锁情况,并通过改进加锁流程及死锁判决流程,使自旋锁能够保护在数据结构上一段较长时间的操作,并能处理期间加锁线程的异常结束导致的死锁问题。
申请公布号 CN102129391A 申请公布日期 2011.07.20
申请号 CN201110060572.5 申请日期 2011.03.14
申请人 华中科技大学 发明人 王非;黄本雄;刘维;邓磊
分类号 G06F9/46(2006.01)I 主分类号 G06F9/46(2006.01)I
代理机构 北京市德权律师事务所 11302 代理人 周发军
主权项 一种数据库中自旋锁的实现方法,其特征在于,在共享内存中存储两个全局变量,一个是自旋锁变量,另一个是ID变量,系统初始化时两个变量被初始化为0;在加锁操作时,按如下步骤:步骤101,用原子操作读取ID变量中的值并将其值加1;步骤102,将第101步中获取的ID值与加锁后的状态值合成一个自旋锁变量值N,合成方法是:低位存储锁变量状态,高位存储ID值;步骤103,以原子操作访问自旋锁变量,尝试加锁操作;步骤104,若自旋锁状态为未占用,则加锁成功,将步骤102合成的锁变量值以原子操作存入自旋锁变量,对自旋锁变量的访问和将值存于自旋锁变量是原子的;步骤105,若自旋锁状态为已占用,加锁不成功则进入死锁判决流程,如果未出现死锁,则处理器自旋等待,转入步骤103进行加锁尝试;如果判断出现死锁;则转入步骤106解自旋锁,并重新转入步骤103。
地址 430074 湖北省武汉市洪山区珞喻路1037号