转载

PostgreSQL V9.6 LWLock实现分析(八)

PostgreSQL V9.6 LWLock实现分析(八)

2016-07-24 12:01:30 |  分类: 数据库 |  标签: | 举报 | 字号   订阅

     

用微信  “扫一扫”

将文章分享到朋友圈。

 
PostgreSQL V9.6 LWLock实现分析(八)

用易信  “扫一扫”

将文章分享到朋友圈。

 
  下载LOFTER 我的照片书  |

LWLock 释放锁

    LWLockRelease() 函数释放特定的锁(参数指定的锁), LWLockReleaseAll() 函数调用 LWLockRelease() 函数完成 当前进程持有的 (通过“ held_lwlocks ”持有)所有锁的释放。另外有个 LWLockReleaseClearVar() 函数配对加锁操作中的 LWLockAcquireOrWait() 函数使用。

void

LWLockRelease (LWLock *lock) // 释放锁并唤醒等待者

{...

    for (i = num_held_lwlocks; --i >= 0;)   // 准备从 held_lwlocks 中释放锁,为此锁找到当初的加锁模式

{

if (lock == held_lwlocks [i].lock)

{

mode = held_lwlocks[i].mode;

break;

}

}

...

    if (mode == LW_EXCLUSIVE) // 释放锁,即给锁标志位置位(还原为初始值)

oldstate = pg_atomic_sub_fetch_u32 (&lock->state, LW_VAL_EXCLUSIVE);

else

oldstate = pg_atomic_sub_fetch_u32 (&lock->state, LW_VAL_SHARED);

...

if (check_waiters)

{

/* XXX: remove before commit? */

LOG_LWDEBUG("LWLockRelease", lock, "releasing waiters");

        LWLockWakeup (lock); // 如果此锁上有等待这,唤醒等待者(告诉操作系统重新调度进程)

}

...

}

  评论这张

阅读( 5 ) | 评论( 0 )

     
PostgreSQL V9.6 LWLock实现分析(八)

用微信  “扫一扫”

将文章分享到朋友圈。

 
PostgreSQL V9.6 LWLock实现分析(八)

用易信  “扫一扫”

将文章分享到朋友圈。

 

喜欢 推荐 转载

历史上的今天

在LOFTER的更多文章

评论

原文  http://blog.163.com/li_hx/blog/static/18399141320166240130950
正文到此结束
Loading...