新闻详情

新闻详情

首页 / 资讯中心 / 详情

跟我一起学“仓颉”编程语言-原子操作

发布时间:2026/9/2 6:19:47来源:尧图网络
跟我一起学“仓颉”编程语言-原子操作
原子操作是指在多线程中的一个不可分割的操作单元。在一个原子操作中要么所有步骤都执行要么所有操作都不执行。比如在进行转账的时候甲向乙转账100元就是甲的钱减少100元乙的钱多100元如果因为某种原因而导致转账失败那么整个操作都要回滚否则就会导致数据不一致。原子操作的时候需要导包import std.sync.*一、整数类型的原子操作整数类型原子操作支持基本的读写、交换以及算数运算符操作。package Study // 导包 import std.sync.* import std.collection.* let counter AtomicInt64(100) main () { let futures ArrayListFutureInt64() // 创建100个子线程 for (_ in 0..100) { let future spawn { // 在每个子线程中增加这里是原子操作 counter.fetchAdd(1) } // 将子线程对应的Future实例添加到futures中 futures.add(future) } // 等待所有子线程执行结束 for (future in futures) { // 阻塞主线程直到future对应的子线程执行结束 future.get() } println(counter.load()) }二、布尔类型的原子类型布尔类型的原子操作支持基本的读写、交换操作。package Study // 导包 import std.sync.* import std.random.Random import std.collection.* // 标记电话是否正在接听初始不接听 let isCalling AtomicBool(false) func callControl() { // 如果电话正在接听则输出信息 if (isCalling.load()) { println(线程${Thread.currentThread.id} 正在等待接听) } // 当前线程在接听空闲时接听 while (true) { // 在设置接听标记为true后开始接听 if (isCalling.compareAndSwap(false, true)) { println(线程${Thread.currentThread.id} 正在接听) // 模拟通话时间 sleep(Duration.millisecond * Random().nextInt64(5000)) println(线程${Thread.currentThread.id} 接听结束) // 设置接通为false isCalling.store(false) break } } } main () { // 创建一个list存储所有子线程实例 let list ArrayListFutureUnit() // 创建5个电话子线程 for (_ in 0..5) { let future spawn { callControl() } // 将子线程对应的Future实例添加到list list.add(future) } // 等待所有子线程执行结束 for (future in list) { // 阻塞主线程,直到子线程执行结束 future.get() } println(所有通话结束) }三、引用类型的原子操作引用类型的原子操作支持基本的读写、交换操作。package Study // 导包 import std.sync.* import std.collection.* // 使用AtomicReference安全处理缓存对象 let cache AtomicReference(CacheObject()) // 模拟缓存对象 class CacheObject { CacheObject(var data: String){} } /* * 更新缓存信息 */ func updateCache(data: String) { while (true) { let expectedCache cache.load() let newChcae CacheObject(data) if (cache.compareAndSwap(expectedCache, newChcae)) { println(缓存更新: ${newChcae.data}) break } } } main () { let futureList ArrayListFutureUnit() for (i in 0..3) { let future spawn { updateCache(i.toString()) } // 将子线程对应的Future实例添加到list中 futureList.add(future) } // 等待所有子线程执行结束 for (future in futureList) { // 阻塞主线程 future.get() } }四、小结本章为大家详细的介绍了仓颉编程语言中原子操作的内容下一章为大家带来可重入互斥锁的内容。最后创作不易如果大家觉得我的文章对学习仓颉服务端开发有帮助的话就动动小手点个免费的赞吧收到的赞越多我的创作动力也会越大哦谢谢大家
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

RVC WebUI 内置 UVR5:5 分钟免费跑通一次人声伴奏分离 2026/9/2 11:31:19

RVC WebUI 内置 UVR5:5 分钟免费跑通一次人声伴奏分离

RVC WebUI 内置 UVR5&#xff1a;5 分钟免费跑通一次人声伴奏分离 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Convers…

阅读更多 →
从零到一:我的Java后端开发学习路线图 2026/9/2 11:31:19

从零到一:我的Java后端开发学习路线图

世界上根本没有一条普适的Java后端开发学习路线。这句话听起来很残酷&#xff0c;但它是事实。任何人告诉你“照着我这条路走完就能成为架构师”&#xff0c;要么在卖课&#xff0c;要么在卖书。真正的路线图&#xff0c;是用金钱、时间和无数个深夜debug换来的&#xff0c;它不…

阅读更多 →
SillyTavern 新手上手教程:把 AI 角色扮演跑在自己的模型上 2026/9/2 11:31:19

SillyTavern 新手上手教程:把 AI 角色扮演跑在自己的模型上

SillyTavern 新手上手教程&#xff1a;把 AI 角色扮演跑在自己的模型上 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 想象这样一个画面&#xff1a;打开浏览器&#xff0c;屏幕上不是干巴…

阅读更多 →
RTX 4090散热模组改造:驱动半导体制冷片的高效散热方案 2026/9/2 11:31:19

RTX 4090散热模组改造:驱动半导体制冷片的高效散热方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
czkawka 核心库接口设计指南:一套 API 契约如何同时驱动 CLI、GUI 与第三方嵌入 2026/9/2 11:31:19

czkawka 核心库接口设计指南:一套 API 契约如何同时驱动 CLI、GUI 与第三方嵌入

czkawka 核心库接口设计指南&#xff1a;一套 API 契约如何同时驱动 CLI、GUI 与第三方嵌入 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka czkawk…

阅读更多 →
MCP Server vs REST API:AI Agent 工具接入的实测对比 2026/9/2 11:28:19

MCP Server vs REST API:AI Agent 工具接入的实测对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞