一不留神实现了一个特轻量级的多读单写锁?

阿呆_ 阿呆_ 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
除了不支持嵌套似乎没什么逻辑问题. 代码中使用了Sleep(1)而没有使用Sleep(0)或SwitchToThread()是为了保证当前等待的线程将执行控制权切换到其它正处理锁定数据的线程--即使它线程优先级低也能切换,并且避免由于多次调用Sleep(0)或SwithThread而带来的当前线程执行时间片过少而使内核自动升级当前线程优先级而造成长时间执行无效代码。


var
iLock: Integer;

procedure ReadLock;
begin
while InterlockedIncrement(iLock) <= 0 do
begin
InterlockedDecrement(iLock);
Sleep(1);
end;
end;

procedure ReadUnlock;
begin
InterlockedDecrement(iLock);
end;

procedure WriteLock;
begin
while (InterlockedCompareExchange(iLock, $FF000000, 0) <> 0) do
Sleep(1);
end;

procedure WriteUnlock;
begin
InterlockedExchange(iLock, -1);
InterlockedIncrement(iLock);
end;
...全文

相关推荐

多读单写锁演示程序

多读单写锁演示程序, 参考windows核心编程

2608

行业分类-设备装置-Key-Value型单写多读锁池软件模块及其运行方法.zip

行业分类-设备装置-Key-Value型单写多读锁池软件模块及其运行方法.zip

programcx

通过stm32来实现modbus协议,作为主站实现的,实现对寄存器的单读单写多读多写

通过stm32来实现modbus协议,作为主站实现的,实现对寄存器的单读单写多读多写,想通过stm32来实现modbus协议的同学可以下载了,相互学习一下.zip

GZM888888

数据库锁(行锁,表锁,共享锁,排他锁)脏读、不可重复读、幻读和事物隔离级别

数据库锁(行锁,表锁,共享锁,排他锁) 行锁 我们知道mysql的Innodb引擎是支持行锁的,与Oracle不同,mysql的行锁是通过索引加载的,即行锁是加载索引响应的行上的,要是对应的SQL语句没有索引,则会走表锁。 行锁无法实现,取而代之就是表锁。 行锁特点: 1.行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。 2.两个事务不能锁同一个索引。 3.锁冲突概率低,并发性高,但是会有死锁的情况出现。 表锁 顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作。表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张

weixin_38500709

同步读锁,异步互斥写锁源码

同步读锁,异步互斥写锁源码

chenhuan5870
评论 139
收藏 已收藏
分享
返回顶部
阿呆_
Windows SDK/API 1,184 成员 22,326 内容