文章插图
互斥锁锁定和解锁使用实例
使用方法如下:
1. struct mutex mutex;2. mutex_init(&mutex); /*定义*/3. //加锁4. mutex_lock(&mutex);5. 6. //临界区7. 8. //解锁9. mutex_unlock(&mutex);可以看出,互斥体就是一个简化版的信号量,因为不再需要管理任何使用计数 。
下面网卡DM9000的驱动,其中写入eeprom的操作试用了mutex机制:
static voiddm9000_write_eeprom(board_info_t *db, int offset, u8 *data){ unsigned long flags; if (db->flags & DM9000_PLATF_NO_EEPROM) return; mutex_lock(&db->addr_lock); spin_lock_irqsave(&db->lock, flags); iow(db, DM9000_EPAR, offset); iow(db, DM9000_EPDRH, data[1]); iow(db, DM9000_EPDRL, data[0]); iow(db, DM9000_EPCR, EPCR_WEP | EPCR_ERPRW); spin_unlock_irqrestore(&db->lock, flags); dm9000_wait_eeprom(db); mdelay(1); /* wait at least 150uS to clear */ spin_lock_irqsave(&db->lock, flags); iow(db, DM9000_EPCR, 0); spin_unlock_irqrestore(&db->lock, flags); mutex_unlock(&db->addr_lock);}可以看到每次驱动向eeprom写入数据(访问临界资源),都需要首先获得该资源对应的互斥锁db->addr_lock,并且使用完毕必须释放该锁 。
获取更多关于Linux的资料,请关注公众号「一口Linux」
推荐阅读
- Linux,VMware桥接配置Centos网络
- 如何给WINDOWS 7注入USB和NVME驱动?
- 理解Linux下的SELinux
- 云主机数据库导入与导出
- Windows Server与Linux:究极对比
- Linux驱动基石之POLL机制
- Linux ALSA 图解
- Linux 下的交互式进程浏览器 htop 3.0.0 发布
- 带你玩转 Linux Shellcode
- 在Linux中查找已连接网络的WiFi密码