目录
1 并发与竞争
并发:在操作系统中,一个时间段中有几个程序同时处于就绪状态,等待调度到CPU中运行
竞争:两个或两个以上的进程同时访问一个资源
并发机制:原子变量操作、自旋锁、信号量、完成量
2 原子变量操作
绝对不会在执行结束前被任何其他任务或事件打断(不可被打断操作)
优点:编写简单;
缺点:功能太简单,只能做计数操作,保护的东西太少。
typedef struct {
volatile int counter;
} atomic_t;
linux中定义了两种操作方法:(1)原子整型操作;(2)原子位操作
2.1 原子整型操作
atomic_t count;
定义了一个atomic_t类型的变量
atomic_t类型变量只能通过Linux内核中定义的专用函数来操作
(1)定义atomic_t变量
ATOMIC_INIT的功能:定义一个atomic_t类型的变量。宏定义如下:
#define ATOMIC_INIT(i) { (i) }
定义一个名为count的atomic_t类型变量的方法:
atomic_t count = ATOMIC_INIT(0);
(2)设置atomic_t变量的值
//设置变量v的值为i
#define atomic_set(v, i) (((v)->counter) = i)
(3)读atomic_t变量的值
//返回原子类型变量v的值
#define atomic_read(v) ((v)->counter)
(4)原子变量的加减法
atomic_add()函数用来将第一个参数i的值加到第二个参数v中:
static inline void atomic_add(int i, volatile atomic_t *v)
atomic_sub()函数从原子变量v中减去i的值:
static inline void atomic_sub(int i, volatile atomic_t *v)
(5)原子变量的加减法
atomic_inc()函数用来将v指向的变量加1: