没有最好,只有更好!
分类: LINUX
2013-08-06 22:29:47
一、为什么需要锁
临界区资源保护
二、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) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。