Linux锁相关


Linux锁相关
 
一、为什么需要锁
临界区资源保护
 
二、Linux下锁的类型:
1、  spin_lock(自旋锁)
一般用在多核间
单核间使用可作为抢占式开关
内核队列(kfifo)使用自旋锁
 
2、  mutex(互斥锁)
多用于线程安全的保护
也可用于进程间保护
 
pthread_mutex_t *p_map;
int cpid;
p_map=(pthread_mutex_t*)mmap(NULL,sizeof(pthread_mutex_t)*10,PROT_READ|PROT_WRITE,
MAP_SHARED|MAP_ANONYMOUS,-1,0);
sum_mutex = p_map;
pthread_mutexattr_t mutex_shared_attr;
/* Set pthread_mutex_attr to process shared */
pthread_mutexattr_init(&mutex_shared_attr);
pthread_mutexattr_setpshared(&mutex_shared_attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(sum_mutex, &mutex_shared_attr);
3、  write_lock
4、  read_lock
 
三、死锁
原因:等待永远不可能发生的条件
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要合理。
 
 

相关内容

    暂无相关文章