使用Semaphore和Mutex实现Readers-writer lock (favor writer)【STM32\RT-Thread\读写锁】

本文介绍了如何在STM32F4 Discovery板上,基于RT-Thread 1.1.1实现一个偏向writer的Readers-writer lock。通过信号量和互斥量机制解决多线程中数据采集和共享的并发问题,确保写入操作的优先级高于读取操作。文中还讨论了为何不能用Mutex替代二元信号量,并提供了源码实现。
摘要由CSDN通过智能技术生成

最近一直在捣腾一个自制飞控的项目,硬件平台为STM32F4 Discovery开发板,软件平台为RT-Thread 1.1.1。我打算使用一个单独的线程采集传感器数据并存放在一个共享的buffer里,然后由多个其它线程( 数传线程、飞行控制线程等)来读取这些数据。这就构成了一个典型的Readers-writer problem。


做编程课作业的时候曾经用过pthread的readers-writer lock,感觉很不错,再加上RT-Thread提供现成的信号量和互斥量机制,所以我打算自己实现一个reader-writer lock。


首先要考虑的问题是favor reader还是favor writer? 对于我的项目而言,“写入”更加重要而且频率更低,所以我决定favor writer。


Readers-write lock的结构体声明

typedef struct {
    rt_uint8_t readCnt;
    rt_uint8_t wrWaitCnt;
    struct rt_mutex tempLock;
    struct rt_semaphore writeLock; // binary semaphore
    struct r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值