当前位置: 技术问答>linux和unix
信号量和同步互斥
来源: 互联网 发布时间:2015-10-12
本文导语: 进程的互斥与P、V操作 一、临界资源 什么是临界资源: 任何时候只允许一个进程使用的资源为临界资源。 什么是临界区: 访问临界资源的代码段为临界区。 例如: 代码段1 a = count; a--; count = a;...
进程的互斥与P、V操作
一、临界资源
什么是临界资源:
任何时候只允许一个进程使用的资源为临界资源。
什么是临界区:
访问临界资源的代码段为临界区。
例如:
代码段1
a = count;
a--;
count = a;
代码段2
b = count;
b++;
count = b;
为临界区,count为临界资源。
对临界资源的访问必须满足以下条件:
一次只能有一个进程进入,其他进程等待。
进入者必须在有限时间内退出。
等待者应该有机会进入。
二、信号量
信号量的结构模型:(S,Q)
在2.4.x内核中,信号量数据结构定义为(include/asm/semaphore.h):
struct semaphore {
atomic_t count;
int sleepers;
wait_queue_head_t wait;
#if WAITQUEUE_DEBUG
long __magic;
#endif
};
信号量操作:
1) 初始化
2) P操作
a) S--
b) if(S semcnt-- // counter --
if(semcb->semcnt
一、临界资源
什么是临界资源:
任何时候只允许一个进程使用的资源为临界资源。
什么是临界区:
访问临界资源的代码段为临界区。
例如:
代码段1
a = count;
a--;
count = a;
代码段2
b = count;
b++;
count = b;
为临界区,count为临界资源。
对临界资源的访问必须满足以下条件:
一次只能有一个进程进入,其他进程等待。
进入者必须在有限时间内退出。
等待者应该有机会进入。
二、信号量
信号量的结构模型:(S,Q)
在2.4.x内核中,信号量数据结构定义为(include/asm/semaphore.h):
struct semaphore {
atomic_t count;
int sleepers;
wait_queue_head_t wait;
#if WAITQUEUE_DEBUG
long __magic;
#endif
};
信号量操作:
1) 初始化
2) P操作
a) S--
b) if(S semcnt-- // counter --
if(semcb->semcnt