信号量和自旋锁.pptVIP

  • 22
  • 0
  • 约2.84千字
  • 约 20页
  • 2019-12-06 发布于湖北
  • 举报
linux内核同步 int xxx_count = 0; int testOpen(struct inode *p, struct file *f) { if(xxx_count) { return - EBUSY; } ++xxx_count; return 0; } Note.对于驱动的open函数而言,返回0表示打开成功;返回负值表示打开失败 对于某个字符设备驱动,要求同一时刻只能被一个进程打开,代码如下: 假如进程A先对此设备调用open,同时另一个进程B也对此设备调用open,如果cpu按照如下调度,则不会有任何问题: 假如进程A先对此设备调用open,同时另一个进程B也对此设备调用open,如果cpu按照如下调度,则会出现问题: 进程A和进程B同时对(不同进程) xxx_count (共享资源) 进行操作,产生了竞争行为! 想一想你(A)正上厕所的时候 一个美女(B)闯进来的情形吧 为厕所这个共享资源 加锁 避免了A和B的竞争行为 解决方法:保证对共享资源的互斥访问 如何做到互斥访问? 访问共享资源的代码区块叫做“临界区”, 临界区需要以某种互斥机制加以保护:自旋锁,信 号量等 一个执行单元在访 问共享资源的时候, 其他的执行单元 被禁止访问 进程 Linux中的信号量是一种

文档评论(0)

1亿VIP精品文档

相关文档