harmony OS NEXT-设备开发中的核心概念

news/2025/3/28 11:00:18/文章来源:https://www.cnblogs.com/yihonghh/p/18785286

并发编程中的核心概念

1. 队列(Queue)

队列是一种先进先出(FIFO)的数据结构,用于在线程之间传递数据,确保线程安全。

特点:

  • 线程安全:队列内部实现了线程同步,多个线程可以安全地访问。
  • FIFO:数据按照进入队列的顺序被处理。

应用场景:

  • 生产者-消费者模型。
  • 任务调度系统。

示例代码(Python):

import queue# 创建队列
q = queue.Queue()# 放入数据
q.put("Task 1")
q.put("Task 2")# 取出数据
while not q.empty():task = q.get()print(f"Processing {task}")

2. 事件(Event)

事件是一种线程间的信号机制,用于线程之间的同步。

特点:

  • 信号机制:线程可以等待事件发生,或者通知其他线程事件已经发生。
  • 灵活性:可用于复杂的线程间通信。

应用场景:

  • 控制线程的执行顺序。
  • 多线程任务完成的通知。

示例代码(Python):

import threading# 创建事件
event = threading.Event()def worker():print("Worker waiting for event...")event.wait()  # 等待事件触发print("Event received, worker proceeding.")# 创建线程
thread = threading.Thread(target=worker)
thread.start()# 触发事件
print("Main thread setting event.")
event.set()

3. 信号量(Semaphore)

信号量用于控制同时访问某一资源的线程数量。

特点:

  • 计数器:限制线程的并发数量。
  • 线程同步:保护共享资源。

应用场景:

  • 限制数据库连接池的大小。
  • 控制访问共享资源的线程数。

示例代码(Python):

import threading
import time# 创建信号量
semaphore = threading.Semaphore(2)  # 最多允许2个线程访问def worker(name):print(f"{name} waiting for semaphore...")with semaphore:  # 获取信号量print(f"{name} acquired semaphore.")time.sleep(2)print(f"{name} released semaphore.")# 创建线程
threads = [threading.Thread(target=worker, args=(f"Thread-{i}",)) for i in range(4)]
for t in threads:t.start()
for t in threads:t.join()

4. 互斥锁(Mutex/Lock)

互斥锁用于确保某一时刻只有一个线程能够访问某一共享资源。

特点:

  • 独占性:只有一个线程能持有锁。
  • 线程同步:防止数据竞争。

应用场景:

  • 保护共享变量。
  • 防止线程间的数据竞争。

示例代码(Python):

import threading# 创建锁
lock = threading.Lock()
shared_resource = 0def worker():global shared_resourcefor _ in range(100000):with lock:  # 获取锁shared_resource += 1# 创建线程
threads = [threading.Thread(target=worker) for _ in range(2)]
for t in threads:t.start()
for t in threads:t.join()print(f"Final value of shared_resource: {shared_resource}")

对比总结

特性 队列(Queue) 事件(Event) 信号量(Semaphore) 互斥锁(Mutex/Lock)
主要功能 数据传递 信号通知 控制并发线程数 保护共享资源
是否线程安全
使用场景 任务队列 线程间通知 资源访问限制 共享资源保护

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

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

相关文章

harmony OS NEXTUI开发

UI开发 1. 布局概述 1.1 开发流程1.先确定开发流程 -> 2.分析页面元素构成 ->3.选用合适的布局容器组件1.3 布局元素组成:盒模型2.1 布局分类 2.1 线性布局线性布局是开发中最常用、最基础的布局,通过线性容器Row和Column构建2.1.1 线性布局子元素排列方向:主轴布局子…

harmony OS NEXT组件结构

组件结构 1. 认识基本的组件结构ArkTS通过装饰器@Component 和@Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件 自定义组件中提供了一个build函数,开发者需要在函数内以链式调用的方式进行基本的UI描述,UI描述的方法请参考UI描述规范srtuct-自定义组件基于stru…

如何使用 vxe-table 来实现高亮行与高亮列,单元格选择高亮移动功能

如何使用 vxe-table 来实现高亮行与高亮列,单元格选择高亮移动功能 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table 效果代码 通过 rowConfig.isCurrent 启用高亮行功能,columnConfig.isCurre…

Browser-use探索-webui

UI化的Browser-use 拉项目下来:git clone https://github.com/browser-use/web-ui.git # 拉取项目依次安装依赖:# pip install browser-use# playwright install# pip install -r requirements.txt 重新搞个配置文件.env:OPENAI_ENDPOINT=https://api.openai.com/v1 OPENAI_…

Web 页面实现图片放大镜效果

Web 页面实现图片放大镜效果Web 页面实现图片放大镜效果 下面是一个完整的示例代码: <!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>图片放大镜效果</title><style>.container {position: relative;width…

3.A+B 问题三

用while(hasNext())来判断是非还有输入 后面用if判断结束循环的条件 break 结束循环; continue 跳过本次循环 进入下一次循环

save actions 设置

activate save actions on save – 在保存的时候激活save actions optimize imports – 自动删除没有引用的importsreformat file – 自动格式化代码add missing @Override – 在save actions激活的时候直接提添加overrideadd a serialVersionUID – 自动添加序列化id

同源策略SpringBoot允许跨域请求配置

完全允许(测试环境) import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotat…

【Vscode】用Vscode配置简约方便的Qt环境!

其实本文是在好不容易配好的情况下写成 故进食后人 Qt Creator的那个页面真的好丑 写完上学期大作业 这学期还要写的时候终于受不了了 而且各种报错什么的非常不好用 不知道是在干嘛 毕竟谁不想用舒服的字体 然后再配上麻衣学姐的背景和看板娘写代码呢?() 于是我开始探索怎么…

17.6K star!后端接口零代码的神器来了,腾讯开源的ORM库太强了!

"🏆 实时零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端定制返回 JSON 的数据和结构"嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法"🏆 实时零代码、全功能、强安全 ORM 库 🚀 后端接口和文…

WPF 和 Avalonia 开发者的 html css 前端指南 WrapPanel 篇

本文主要是向大家列出 WPF 和 Avalonia 的 WrapPanel 在 html 和 css 的实现方法。WPF 和 Avalonia 开发者的 html css 前端指南 WrapPanel 篇笔者前端框架使用的是 Vue3 + Deno。 笔者主要会以 Avalonia 作为 C# 技术部分的示例。 本文主要是向大家列出 WPF 和 Avalonia 的 Wr…

os管理文件和open创建文件

目录os基础操作获取当前工作目录更改工作目录列出目录内容创建目录删除目录、文件文件重命名路径拼接与拆分判断路径是否存在递归遍历目录open创建文件读取模式下写入模式下 os基础操作 获取当前工作目录 import os #返回的是一个绝对路径 print(f"当前的工作目录为:{os.…