读写信号量的实现是基于读写锁的。可以想到他们的应用都差不多。自旋锁、读写锁中不能有睡眠,我们就不做实验验证了,当你在锁之间添加msleep函数时,会造成系统崩溃。
顺序锁:
顺序锁和读写锁非常相似,只是他为写者赋予了较高的优先级:事实上,即使在读者正在读的时候也允许写者继续运行。这种策略的好处是写者永远不会等待(除非另外一个写者正在写),缺点是有些时候读者不得不反复读相同数据直到他获得有效的副本。
最后,为完整起见,附上代码的Makefile文件:
obj-m+=semaphore.o down_read.o spinlock.o CURRENT:=$(shell pwd) KERNEL_PATH:=/usr/src/kernels/$(shell uname -r) all: make -C $(KERNEL_PATH) M=$(CURRENT) modules clean: make -C $(KERNEL_PATH) M=$(CURRENT) clean