Linux驱动-互斥锁用法,建议先保存( 三 )


文章插图
互斥锁锁定和解锁使用实例
使用方法如下:
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」




推荐阅读