aardio - 【库】lock 跨进程读写锁

33 篇文章 17 订阅

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=272;bottom=203;topmost=1)
winform.add(
button={cls="button";text="无锁演示";left=27;top=132;right=120;bottom=184;z=2};
button2={cls="button";text="有锁演示";left=139;top=132;right=232;bottom=184;z=3};
edit={cls="edit";text="0";left=54;top=26;right=206;bottom=109;edge=1;font=LOGFONT(h=-16);multiline=1;z=1}
)
/*}}*/

import godking.lock;
import raw.struct;
var lock = godking.lock();
var data = ..raw.struct({int v});
winform.button.oncommand = function(id,event){
	winform.button.disabled = true;
	winform.button2.disabled = true;
	for(i=1;5;1){
		thread.invoke( 
			function(data){
				while(1){
					import console;
					console.dump("正在写=====");
					thread.delay(1000);
					data.v++;
					console.dump("已写完");
				}
			},data
		)
	}
	thread.invoke( 
		function(data,winform){
				while(1){
					thread.delay(1000);
					winform.edit.text = data.v;
				}
		},data,winform
	)
}

winform.button2.oncommand = function(id,event){
	winform.button.disabled = true;
	winform.button2.disabled = true;
	// 创建 5 个线程,使用【写锁】,进行数据写入。
	for(i=1;5;1){
		thread.invoke( 
			function(data,lock){
				import godking.lock;
				import console;
				lock = godking.lock(lock);
				while(1){
					lock.write();
						console.dump("--------------------进入【写锁】,数值 +1 √√√√√√√√√√√√√√√√√√√√√√");
						thread.delay(1000);
						data.v++;
						console.dump("即将退出【写锁】");
					lock.endWrite();
				}
			},data,lock
		)
	}
	// 创建 1 个线程,使用【读锁】,进行数据读取。
	thread.invoke( 
		function(data,winform,lock){
				import godking.lock;
				import console;
				lock = godking.lock(lock);
				while(1){
					lock.read();
						console.dump("--------------------进入【读锁】,此时不在【写锁】内,数值是不会 +1 的。-------------");		
						thread.delay(1000);
						winform.edit.text = data.v;
						console.dump("即将退出【读锁】");
					lock.endRead();
				}
		},data,winform,lock);
	// 创建 1 个线程,不加锁,进行数据读取。
	thread.invoke( 
		function(data,winform){
				import console;
				while(1){
					console.dump("无锁读,不受锁影响");
					thread.delay(200);
					winform.edit.text = data.v;
				}
		},data,winform);
}

winform.show();
win.loopMessage();

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢光庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值