原子操作就是指不能再进一步分割的操作,一般原子操作用于变量或者位操作。
1.包含头文件
#include <linux/atomic.h>
2.定义一个原子操作的全局变量
atomic_t lock; /* 原子操作 */
3. 初始化原子变量
atomic_set(&gpioled.lock, 1); //向gpioled.lock写入数据1
4.原子操作使用
/* 判断lock
---使用atomic_dec_and_test函数从gpioled.lock减1,如果结果为0,就返回真;否则返回假
*/
if(!atomic_dec_and_test(&gpioled.lock)) { /* 不能使用驱动 */
atomic_inc(&gpioled.lock); //给gpioled.lock加 1,也就是自增
return -EBUSY;
}
#if 0
if(atomic_read(&gpioled.lock) <= 0) { //读取gpioled.lock的值,并且返回。
return -EBUSY;
} else {
atomic_dec(&gpioled.lock);
}
#endif
5. 使用完释放原子操作
atomic_inc(&dev->lock); /* 加一,释放驱动 */