最近一直在捣腾一个自制飞控的项目,硬件平台为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