本次主要是学习线程同步时保护数据的锁机制,对于多个线程同时对一个变量进行赋值操作时,会造成该变量的赋值不确定,出现了竞争状态,这时需要有个锁来保护下,即加个锁,同一时间只能有一个线程对其操作,当锁释放了,另一线程才能对其操作,而处在加锁和解锁之间的区域叫做临界区,对临界区的操作要保证其原子性,即一次性搞定,不能被中断,而内核也提供了原子量,用于轻量级操作。接下来说说内核里相关的内容吧:
1.原子量
1).结构体
在include/linux/types.h文件中有如下结构体(分别对应32位和64位系统):
typedef struct {
int counter;
} atomic_t;
#ifdef CONFIG_64BIT
typedef struct {
long counter;
} atomic64_t;
#endif
2).整型原子操作
在include/asm-generic/atomic.h文件中有如下操作宏和函数定义:
a.创建及初始化
#define ATOMIC_INIT(i) { (i) }