Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-23 11:52
个人简介

没有最好,只有更好!

文章分类
文章存档

2013年(2)

2011年(1)

我的朋友

分类: 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 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要合理。
阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~