读写者公平竞争

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

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

信号量

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

读写者公平竞争_第1张图片
父线程

创建子进程。

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

reader

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


读写者公平竞争_第2张图片
读者

writer

不需要写互斥量wmutex


读写者公平竞争_第3张图片
写者

编译运行

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


读写者公平竞争_第4张图片
image.png

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

补充一下未截的图


读写者公平竞争_第5张图片
头文件以及宏定义
读写者公平竞争_第6张图片
writing and reading

你可能感兴趣的:(读写者公平竞争)