读写者公平竞争

2019-04-09  本文已影响0人  持之以蘅

满足条件:
优先级相同;
写者、读者互斥访问;
只有一个写者访问临界区;
可以有多个读者同时访问临界资源

定义信号量fmutex(文件资源访问的互斥),queue(进入队列的互斥),rmutex(读信号互斥),wmutex(写信号互斥)。

信号量

创建父线程main(),用sem_init初始化信号量,并创建读写子进程。

父线程

创建子进程。

信号量queue来实现读者与写者的公平竞争
信号量fmutex来实现对临界区的互斥访问

reader

需要读互斥量rmutex来保证读互斥,rcount实现多个读者访问临界资源


读者

writer

不需要写互斥量wmutex


写者

编译运行

gcc v3.c -lpthread -o v3
./v3


image.png

观察到读写者有交替进行,而不是读者先进行或者写者先进行,说明实现了公平竞争

补充一下未截的图


头文件以及宏定义 writing and reading
上一篇 下一篇

猜你喜欢

热点阅读