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

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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/32287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的实战常用一、验证码登录(解决session共享问题)(思路、意识)

一、基于session实现登录功能 第一步:发送验证码: 用户在提交手机号后,会校验手机号是否合法: 如果不合法,则要求用户重新输入手机号如果手机号合法,后台此时生成对应的验证码,同时将验证码进行…

前端路线指导(4):前端春招秋招经验分享

春招/秋招经验分享(前端) 哈喽大家好,我是小粉,双一流本科,自学前端一年,收获腾讯,字节等多家大厂offer,一半以上ssp~ 今天给大家分享一下我的春招(暑期实习)、秋招经历,…

【Gradio】如何设置 Gradio 数据框的样式

简介 数据可视化是数据分析和机器学习的关键方面。Gradio DataFrame 组件是一种流行的方式,在网络应用程序中显示表格数据(特别是以 pandas DataFrame 对象的形式)。 本文将探讨 Gradio 的最新增强功能,这些功能允许用户整合 pand…

Spring的启动扩展点机制详解

在Java的世界中,我们知道Spring是当下最主流的开发框架,没有之一。而在使用Dubbo、Mybatis等开源框架时,我们发现可以采用和Spring完全一样的使用方式来使用它们。 可能你在平时的使用过程中并没有意识到这一点,但仔细想一想&…

解决js打开新页面百度网盘显示不存在方法:啊哦,你所访问的页面不存在了。

用js打开新页面open或window.location.href打开百度网盘后都显示:啊哦,你所访问的页面不存在了。 window.open(baidu_url); window.location.href baidu_url;在浏览器上,回车后网盘资源是可以打开的,刷新也是打开的。这是很奇怪…

深入分析并可视化城市轨道数据

介绍 中国城市化进程加速中,城市轨道交通的迅速扩张成为提升城市运行效率和居民生活品质的关键。这一网络从少数大城市延伸至众多大中型城市,映射了经济飞跃和城市管理现代化。深入分析并可视化城市轨道数据,对于揭示网络特性、评估效率、理…

进程、线程的区别

进程、线程的关系 开工厂生产手机,制作一条生产线,这个生产线上有很多的器件以及材料。一条生产线就是一个进程。 只有生产线是不够的,使用找五个工人来进行生产,这个工人能够利用这些材料最终一步步的将手机做出来,这…

Ansible 自动化运维实践

随着 IT 基础设施的复杂性不断增加,手动运维已无法满足现代企业对高效、可靠的 IT 运维需求。Ansible 作为一款开源的自动化运维工具,通过简洁易用的 YAML 语法和无代理(agentless)架构,极大简化了系统配置管理、应用部…

LuxTrust、契约锁联合启动中欧两地跨境电子签服务

6月18日,欧洲领先的数字身份和电子签名厂商-LuxTrust、全球领先的数字化技术和服务的提供商-浩鲸科技一行莅临契约锁上海总部,并于当日下午联合举行“跨境签战略合作”现场签约仪式。 三方将以此次合作为契机,发挥各自领域专业优势&#xff…

DS知识点总结--线性表定义及顺序表示

数据结构知识点汇总(考研C版) 文章目录 数据结构知识点汇总(考研C版)二、线性表2.1 线性表的定义和操作2.1.1 线性表的定义2.1.2 线性表的基本操作 2.2 线性表的顺序表示2.2.1 顺序表的定义2.2.2 顺序表上的基本操作的实现 二、线性表 2.1 线性表的定义和操作 2.1.1 线性表的…

区块链会议投稿资讯CCF A--WINE 2024 截止7.15 附录用率 附录用的区块链文章

Conference:The Conference on Web and Internet Economics (WINE) CCF level:CCF A Categories:Cross-cutting/comprehensive/emerging Year:2024 Conference time: December 2-5, 2024 录用率: sele…

MSPM0G3507——PWM

在sysconfig中,左侧可以选择MCU的外设,我们找到并点击TIMER-PWM选项卡,在TIMER-PWM中点击ADD,就可以添加定时器下的PWM外设。 这里设置通道0为100Hz的频率,0%占空比的PWM,周期计数值为1000,比较…

我理解的文本表示模型

词袋模型与N-grams模型 1 词袋模型 (Bag of Words)1.1 one-hot 取值 (Binary)1.2 Term Frequency 取值 (TF)普通频数 r a w t f raw_{tf} rawtf​频率范数归一化对数频数 1.3 Inverse document frequency (IDF)1.4 TF-IDF scores 取值 N-Gram 最简单的文本建模场景&#xff1a…

聚类算法(2)--- ISODATA算法

本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记&#…

Vue02-第一个Vue程序

第一个Vue程序 1、什么是MVVM MVVM(Model-View-ViewModel)是一种软件设计模式,由微软WPF(用于替代WinForm,以前就是用这个技术开发桌面应用程序的)和Silverlight(类似于Java Applet&#xff0…

新手(初学者)学R语言第一课,从学正确导入数据开始

初看题目好像我在教你怎么导入数据,不不不,我是在教你正确的导入数据,不是说数据导入R就叫正确导入数据了。本章为新手教程,老手可以跳过。 这个内容早就想写了,今天有点空和大家聊一下。为什么R语言对于新手而言不太友…

nginx启动之后任务管理器里面没有nginx进程

原因1:确保你的nginx文件夹里面只包含英文路径!绝对不能有中文! 原因2: 到conf\nginx.conf里面查看端口和IP地址是否正确设置,ip地址有无正确输入

【MATLAB】(高数)

参考文章 函数极限 导数与偏导 极值和最值 局部范围的最值 局部范围内的最值,相当于函数的极值 离散数据的最值 多元函数的极值 fminunc [x, fval] fminunc(fun, x0)fun为代求极值的函数;x0为起始点,即从这个点开始寻找极值,…

4、MFC:菜单栏、工具栏与状态栏

菜单栏、工具栏与状态栏 1、菜单栏1.1 简介1.2 创建属性设置菜单消息成员函数 1.3 实例 2、工具栏2.1 简介工具栏属性2.2 创建消息CToolBar类的主要成员函数 2.3 实例 3、状态栏3.1 简介3.2 创建CStatusBar类状态栏创建 3.3 实例 1、菜单栏 1.1 简介 菜单在界面设计中是经常使…

渗透测试-若依框架的杀猪交易所系统管理后台

前言 这次是带着摸鱼的情况下简单的写一篇文章,由于我喜欢探究黑灰产业,所以偶尔机遇下找到了一个加密H币的交易所S猪盘,我记得印象是上年的时候就打过这一个同样的站,然后我是通过指纹查找其它的一些站,那个站已经关…