OpenThreads库介绍——ReadWriteMutex

OSG场景的多线程渲染,基本场景渲染过程——b站72讲17讲+书籍 osg72讲 阅读详情

1. 读写锁简介

OpenThreads库中的ReadWriteMutex是一种读写锁,读写锁是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁。多读者锁,用于解决读写问题。读操作可并发重入,写操作是互斥的。简单来说就是允许多个线程同时读取资源,但是一旦要修改资源(写操作),那么所有读的线程都必须被阻塞,直到写的线程完成修改。

2. 类型

读写锁可以根据实际的需要采用不同的策略,主要包括:

(1)更高的读取优先级(read-preferring)
(2)更高的写入优先级(write-preferring)
(3)未定义优先级(unspecified-priority-RW)

3. 实现

OpenThreads采用的实现是Raynal的一种实现,实现的伪代码如下:(使用两个Mutex和一个计数器)

  • Begin Read

Lock r.
Increment b.
If b = 1, lock g.
Unlock r.

  • End Read

Lock r.
Decrement b.
If b = 0, unlock g.
Unlock r.

  • Begin Write

Lock g.

  • End Write

Unlock g.

OpenThread采用的这种策略是read-preferring,也就是读取优先级更高。这种策略有一个劣势,就是写入数据的线程会一直等待所有的读取线程结束后才能写入。如果读取的公共资源很多,可能会造成write-starvation。

4. 参考资料:

1. 死锁,活锁,饿死,阻塞的理解

2. Readers–writer lock

【认识OpenThread协议】 实现 Thread 的 Mesh 路由协议(MLE,Mesh Link Establishment),支持多跳通信和动态路由。智能城市: 如环境监测、智能交通,OpenThread协议助力智能城市的建设和管理,通过物联网技术实现城市资源的智能化配置和优化。工业物联网: 如设备监控、资产跟踪,OpenThread协议适用于工业物联网场景,能够实现设备之间的可靠通信和数据传输。医疗设备: 如远程健康监测,OpenThread协议应用于医疗设备领域,能够实现远程健康监测和医疗数据的实时传输与分析。 阅读详情

相关推荐

20.[个人]C++线程入门到进阶(20)----线程函数:OpenThread

待更新

shuimanting520的博客 1390

OpenThreads线程库

OpenThreads与pthread不同点在于,他是根据面向对象开发的。 一、OpenThreads在线程同步上不同于之前我所了解的(比如pthread),除了常用的几路,他还提出了额外的。 传统的: 1. 互斥量OpenThreads::Mutex类 当线程使用某一资源时,先使用互斥量加锁。由于采用了面向对象机制将互斥量抽象为一个类,所以不像pthread函数那样传入个参数。Mutex

4469

QT+OSG/osgEarth编译之七十九:OpenThreads+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5核心库OpenThreads)

通过一套OpenThreads代码和框架,实现OpenThreads跨平台编译。 在Qt环境下,集成库的头文件、库文件,构建跨平台编译的pro文件。 通过构建的一套配置工程,基于Qt Creator IDE,完成跨平台的编译实践。 在Windows、Linux、MacOS等操作系统上进行测试,成功编译,形成的成果(头文件、库文件等)可在不同系统下调用或使用,从而更好地构建跨平台解决方案。 采用的是osg-3.6.5版本。 读者可参考博客中的集成原理和pro文件,构建不同版本的OpenThreads跨平台包。

LuckyHanMo的博客 964

OpenThreads库介绍——Thread

OpenThreads库是一个轻量级的跨平台多线程库,在2.x之前是独立发展的一个库,在2.x后并入到OSG的源码中,OSG中大量的多线程操作都是基于这个库编写的。(事实上使用该库是历史原因的问题,在OSG创立的时候,C++标准中并没有C++11引入的线程库),库的详细介绍参考:OpenThreads站点 Thread线程 线程实现类。它是一个面向对象的线程实现接口,每定义一个Thread...

Frank的专栏 7259

OpenThreads-开源

该库旨在为 C++ 程序员提供最小且完整的面向对象 (OO) 线程接口。 它以 Java 线程 API 和 POSIX 线程标准为松散模型。 图书馆的架构是围绕\

openthread:Google发布的OpenThread是Thread网络协议的开源实现

什么是OpenThread? Google发布的OpenThread是... 网络协议的开源实现。 Google Nest已发布OpenThread,以使开发人员可以更广泛地使用Nest产品中使用的技术,从而加快互联家庭产品的开发速度。 ...与操作系统和平台无关的平台狭窄的平台抽象层和较小的内存占用空间,使其具有高度的可移植性。 它支持片上系统(SoC)和网络协处理器(NCP)设计。 ...一个线程认证组件,实现了定义的所有功能,包括所有线程网络层(IPv6、6LoWPAN,具有MAC安全性的IEEE 802.15.4,网格链接建立,网格路由)和设备角色,以及支持。 有关Thre

【开源库学习】OpenThreads

项目地址 Github:https://github.com/tibogens/OpenThreads 码云:https://gitee.com/lukeson/OpenThreads 参考资料 网上已经有很多比较好的文章了,这里汇总一下,便于查阅。 OpenThreads库介绍——Condition OpenThreads库介绍——Barrier OpenThreads库介绍——Block OpenThreads库介绍——ReadWriteMutex OpenThreads库介绍——Mutex ..

撬动未来的支点的专栏 509

ClickHouse集群扩容实战:用clickhouse-copier搞定数据迁移与分片重平衡

本文详细介绍了使用clickhouse-copier工具实现ClickHouse集群从3分片到5分片的平滑扩容实战。通过分片级并行处理、原子性保证等核心机制,该工具能高效完成数据迁移与分片重平衡,同时保持服务连续性。文章涵盖集群拓扑规划、表结构检查、迁移配置、执行监控及迁移后优化等关键步骤,为大数据量场景下的ClickHouse扩容提供完整解决方案。

weixin_29091837的博客 294

OpenThreads库学习

在看STM32资料中看到STM32WB系列“双核无线微控制器配备双核无线微控制器(MCU)配备Bluetooth® 5、OpenThread和ZigBee®3.0连接技术,同时兼备超低功耗性能“不知道这个OpenThread是啥东东: OpenThread库:提供了一个Thread类,供用户创建自己的线程。其使用非常方便,用户只需要继承自OpenThreads::Thread类,#in...

weixin_30905981的博客 698

SQL注入-靶场通关 Less 1-21

打开Burp工具--打开内嵌浏览器--进入靶场第六关--打开拦截--输入?id=1',如果是正确的,说明不存在注入点,如果错误,说明存在注入点,这里是错误的,需要加上注释--+,在回车看结果是正确的,说明找到了注入点。工具,打开内嵌浏览器,打开拦截,输入http://127.0.0.1/sqli-labs-master/Less-9,然后发送到。id=1'--+,后面都注释了,单引号不闭合,报错说明是数字型SQL注入。设置休眠时间为10s,如果执行SQL语句就会加载,说明正确,存在注入点。

weixin_72104324的博客 1392

libero烧录信号抓取

提示:如果改了东西需要重新烧录,需要把这两个界面都关闭再libero打开。两个红色的要关闭掉。然后返回libero开始烧录,观测信号(如果只烧录观测从这一步开始就行)等到下面的messige出现以下信息表示run好了。在下图中右侧可以自己设置,设置完之后记得保存一下。run一下,耐心等待,有警告就ok,run完之后。run成功会变绿色,然后点下面的这个看波形。设置抓取信号:在libero打开。打开的就是烧录界面,直接run。

qq_34047965的博客 1423

OpenThreads解读

HandleHolder 类: 这个类封装了HANDLE 句柄。实现了一些对句柄的操作的函数,比如赋值、获取、关闭句柄等等。 Mutex类: 使用的是临界区进行资源的管理。 使用了Win32MutexPrivateData (在Windows系统中)这个类对临界区 CRITICAL_SECTION 进行封装,然后在Mutex 这个类中保存了一个Win32MutexPrivateData 的成员对象...

封狼居胥 1012

UE5 Decal混合进阶:如何用DBuffer实现自定义Normal插值(附完整材质配置流程)

本文深入解析了UE5中利用DBuffer技术实现Decal自定义Normal插值的完整流程。通过详细的材质配置步骤和核心算法说明,帮助开发者突破传统混合模式限制,掌握高级法线控制技巧,特别适合需要精细环境细节的3A级项目开发。

table的专栏 225

OpenThreads线程管理

HandleHolder 类: 这个类封装了HANDLE 句柄。实现了一些对句柄的操作的函数,比如赋值、获取、关闭句柄等等。 Mutex类: 使用的是临界区进行资源的管理。 使用了Win32MutexPrivateData (在Windows系统中)这个类对临界区 CRITICAL_SECTION 进行封装,然后在Mutex 这个类中保存了一个Win32MutexPrivateData 的成员对...

a_Treasure的博客 515

VisualStudio2022启动报错

把Users\...\AppData\Local\Microsoft\VisualStudio\11.0\ComponentModelCache中的Microsoft.VisualStudio.Default.cache这个文件移除,再重启vs,各项功能都能正常使用了。第一次使用方法1有效果,不知道什么原因后面又报错再删除缓存文件无效了,最后使用方法2启动VS成功。vs2022启动时,报错弹框,在ActivityLog查看具体报错信息,报错原因未知。网上搜索到两种解决方法。方法1:删除缓存文件。

面朝大海,春暖花开 3942

SAP_SD模块更改销售订单定价简介

方式优点缺点适用场景MASS简单,无需开发不能触发重新定价逻辑修改特定字段BDC (VA02)可模拟人工操作维护复杂,速度慢少量订单批改稳定、安全需ABAP支持推荐用于批量重新定价VBOF标准重算返利仅适返利类条件返利更新通过本文,我们了解了 SAP 的[SAP_SD模块更改销售订单定价]的基本概念和应用方法。希望这些信息能帮助您在实际工作中更好地使用 SAP 系统,提高工作效率和管理水平。更多SAP文章请点击更多SAP文章更新,大家一起学习进步!!!

我小时候很黑的博客 715

用OpenThread现实多线程开发三大设计模式

OpenThread是最舒心的跨平台多线程并发库,多线程三大设计模式: Await模式, Factory模式和Actor模式。

linyouhappy的博客 1234

各向同性、VTI、TTI以及双相介质波场数值模拟

各位读者,大家好!在今天的文章中,我将介绍关于波场数值模拟中的各向同性、VTI(垂直横向等参数介质)、TTI(倾斜横向等参数介质)以及双相介质的基本概念。同时,我也会提供一些基础的Fortran代码片段,供大家了解和学习。

qq_38334677的博客 1709

嵌入式平台openthread边界路由构建

OTBR嵌入式平台移植

m0_46411607的博客 1328

硬件工程师学习-硬件的单元测试(UT)(1)电源与时钟的测试

我们在设计的时候,通过控制电源的上电使能管脚或者通过MOSFET、或者专用的电源上电控制芯片,控制不同电源的上电时序,以确保每个芯片的电源上电时序是满足芯片的要求的。我们在测试的时候,需要对相关的要求一一测试,以确认每个上电时序满足要求的。在维基百科中,相位噪声的定义是“时域不稳定性(抖动)导致波形在相位上发生快速、短期、随机的波动,这种波动在频域中的表现即为相位噪声”。单元测试,一般是指基于开发人员自行开展的功能测试及各个功能单元的单元测试,是硬件信号级的测试,分为基本测试和信号完整性测试。

qq_43416206的博客 4034

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【OSG原理与源码分析】OSG多线程模块:OpenThreads之C++跨平台多线程编程库那点事

简介本文将介绍跨平台多线程库的设计方案,还将介绍开源三维图形框架OSG(Open Scene Graph)中的跨平台多线程库OpenThreads的初步理解的一些基础知识。

cgprofessional的博客 833

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OpenThreads库的使用-Mutex

Mutex是什么Mutex,叫互斥锁。 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为” 互斥锁” 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。为什么使用Mutex因为线程存在并发性,并发容易导致问题。举个例子:A,B两个售票员,看到最后还有一张车票。同时,正好有C,D两个人要买这张车票。那么这个车票怎么卖?A认为可以卖给C,B认为可以卖

snail_hunan的专栏 2274

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OpenThread做最舒心的跨平台多线程并发库

OpenThread是世界上最舒心的跨平台多线程并发库。 使用优雅的方式,创建线程、管理线程和线程间通信,从而实现多核并发。 OpenThread无任何依赖,全平台设计,只有两个源文件,让小白都可以轻松玩转C++多线程开发。 OpenLinyou系列项目:https://github.com/openlinyou

linyouhappy的博客 869

OpenThreads库介绍——Mutex

1. 简介 Mutex 是互斥体接口类。如同pthread 等常用的线程库那样,OpenThreads 也提供了互斥体操作的机制,它有效地避免了各个线程对同一资源的相互竞争,即,某一线程欲操作某一共享资源时,首先使用互斥体成员的lock()函数加锁,操作完成之后再使用unlock 函数解锁。一个线程类中可以存在多个Mutex 成员,用于在不同的地点或情形下为共享区域加锁;但是一定要在适当的时候解...

Frank的专栏 1548

OpenThreads库的使用-Thread

Thread简介OpenThread库,提供了一个Thread类,供用户创建自己的线程。其使用非常方便,用户只需要继承自OpenThreads::Thread类,然后自己重写run接口即可。Thread程序示例下面程序,使用一个线程,去卖票。g_ticketCounts表示当前可用的票的数量。#include <OpenThreads/Thread> #include <iostream>int g

snail_hunan的专栏 6323
上一篇: OpenThreads库介绍——Mutex
下一篇: OpenThreads库介绍——Condition
csxiaoshui
博客等级 码龄16年 873粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值