读者-写者实现
来源:互联网 发布:java 选择 编辑:程序博客网 时间:2024/05/16 04:26
/*
* Reader-Writer是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/sem.h>
struct semaphore sem_r;
struct semaphore sem_w;
int readcount = 0; /*表示正在读的进程数(可改成大于0的数)*/
int Read_thread(void *p);
int Write_thread(void *p);
int Read_thread(void *p)
{
p = p;
down(&sem_r); //使用读信号量
if(readcount == 0) //没有进程在读
down(&sem_w); //使用写信号量
readcount += 1;
up(&sem_r); //释放读信号量
printk("Lan is reading: %d\n", readcount);
down(&sem_r);
readcount -= 1;
printk("Read Finish\n\n");
if(readcount == 0)
up(&sem_w);
up(&sem_r);
return 0;
}
int Write_thread(void *p)
{
p = p;
down(&sem_w);
printk("Lan is writing\n");
printk("Write Finish\n\n");
up(&sem_w);
return 0;
}
static int lan_init(void)
{
printk("I am Coming\n");
init_MUTEX(&sem_r);
init_MUTEX(&sem_w);
kernel_thread(Write_thread, NULL, CLONE_KERNEL);
kernel_thread(Read_thread, NULL, CLONE_KERNEL);
kernel_thread(Write_thread, NULL, CLONE_KERNEL);
return 0;
}
static void lan_exit(void)
{
printk("Bye Bye\n");
}
module_init(lan_init);
module_exit(lan_exit);
MODULE_LICENSE("GPL");
#vim Makefile
obj-m += duxie.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
注意:两个make前要先使用Tab键空出。
#sudo insmod duxie.ko
#dmesg
最后几行显示:
I am Coming
Lan is writing
Write Finish
Lan is reading: 1
Read Finish
Lan is writing
Write Finish
上一篇:自己写的小ls
下一篇:myshell
- 世界杰出华商协会集合企业ji...
- Live UC论视频会议对企业的重...
- centos nginx 启动脚本
- JIT生产方式中缩短生产周期的...
- 网站建设中要注意整体的视觉效...
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- xmanager 2.0 for linux配置
- 什么是shell
- linux socket的bug??
- 初学UNIX环境高级编程的,关于...
- chinaunix博客什么时候可以设...
- 一个访问量较大网站的服务器。...
- 收音机驱动与v4l2架构的关系,...
- 如何将linux驱动改为裸机驱动(...
- 读者-写者实现
- 有名信号量实现读者-写者问题(读者优先)
- JAVA多线程实现读者写者问题
- linux C++ 多线程 读者写者实现
- java实现读者-写者问题
- “读者-写者问题”的写者优先算法实现
- 读者-写者同步问题的写者优先实现
- 用互斥锁解决读者-写者问题
- 读者写者问题
- 读者写者问题
- 读者-写者问题
- 读者-写者优先
- 读者写者问题
- 读者写者问题
- 读者-写者问题
- 读者-写者问题
- 读者写者
- 读者-写者问题
- 数组名问题
- 走进ARM-淡淡的记忆
- strncpy与memcpy
- Qt4的QDialog和QWidget
- 自己写的小ls
- 读者-写者实现
- myshell
- I/O文件测试
- linux下的led驱动程序
- 将自己的模块编译进入内核
- CocoaPods安装和使用教程
- ARM指令系统
- DNA Sorting
- 从一个小程序说起-数组指针