满足条件:
优先级相同;
写者、读者互斥访问;
只有一个写者访问临界区;
可以有多个读者同时访问临界资源
定义信号量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
网友评论