Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416949
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 872
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-29 14:38
个人简介

默默的一块石头

文章分类

全部博文(124)

文章存档

2022年(26)

2021年(10)

2020年(28)

2019年(60)

我的朋友

分类: LINUX

2022-01-12 10:40:35

最近学习锁已有点走火入魔,然后做了以下这个测试(虽然不知道有什么用,但是做个记录=-=):
测试内容:在spin_lock获取了锁,且不unlock的情况下对数据进行访问。

相关代码
1、read函数:
ssize_t spin_lock_sleep_read(struct file * filp, char __user * buf, size_t count,
   loff_t * f_pos)
{
 struct spin_lock_sleep_dev *dev = filp->private_data;
 ssize_t retval = 0;
 spin_lock(&dev->lock);
 dev->str = "wrtie in spin lock!";
 //spin_unlock(&dev->lock); 这部分会在退出module的时候做
 return retval;
}
2、write函数:
ssize_t spin_lock_sleep_write(struct file * filp, const char __user * buf,
    size_t count, loff_t * f_pos)
{
 struct spin_lock_sleep_dev *dev = filp->private_data;
 ssize_t retval = 0; 

 dev->str = "write something to test!";
 
 return retval;
}
3、退出module函数:

void spin_lock_sleep_cleanup(void)
{
 int i;
 dev_t devno = MKDEV(spin_lock_sleep_major, spin_lock_sleep_minor);
 printk(KERN_INFO "spin_lock sleep module unloaded now!\n");
 
 if (spin_lock_sleep_devices) {
  for (i = 0; i < spin_lock_sleep_nr_devs; i++) {
   printk("%s\n",spin_lock_sleep_devices[i].str);
   if(spin_is_locked(&(spin_lock_sleep_devices[i].lock)) != 0)
   {
    printk("unlock now!\n");   
    spin_unlock(&spin_lock_sleep_devices[i].lock);
   }
   cdev_del(&spin_lock_sleep_devices[i].cdev);
  }
  kfree(spin_lock_sleep_devices);
 }
 
 unregister_chrdev_region(devno, spin_lock_sleep_nr_devs);
}
1、常规操作:insmod module、创建设备节点
2、读设备节点(执行read函数),如下图,自旋锁锁上不解锁
3、写设备节点(执行write函数),如下图

4、注销module,查看相关数据,已被修改=-=

阅读(338) | 评论(0) | 转发(0) |
0

上一篇:Linux中的惊群问题

下一篇:epoll惊群学习

给主人留下些什么吧!~~