Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15324668
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2010-06-02 12:08:56

1〉互斥锁线程控制:

Mutex 是一种简单的加锁的方法来控制对共享资源的存取。这个互斥锁只有两行状态,上锁和解锁。可以把这种互斥锁看成是某种全局变量,在同一时间只有一个线程掌握 某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作,若其他线程希望上锁一个已经上了锁的互斥锁。该线程就会挂起。直到上锁定线程释放掉互斥锁为止。

可以这么理解,互斥锁使共享资源按照一定的顺序在线程中被使用。

互斥锁操作主要包括以下几个步骤:

1,          互斥锁初始化:pthread_mutex_init

2,          互斥锁上锁: pthread_mutex_lock

3,          互斥锁判断上锁:pthread_mutex_trylock

4,          互斥锁解锁:pthread_mutex_unlock

5,          消除互斥锁:pthread_mutex_destroy

2〉信号量线程控制

信号量本质是上一个非负的整数计数器,它被用来控制对公共资源的访问。

信号量实际上就是操作系统中所用到的PV原语,它广泛的应用于进程或线程间的同步与互斥。

注:PV原语是对整数计数器信号量sem的操作,一次P操作使sem减一,而一次V操作使sem加一,进程(或线程)根据信号量的值来判断是否可对 公共资源具有访问权。当信号量sem的值大于等于零时,该进程(或线程)就具有对公共资源的访问权,如果sem的值小于零时,该进程(或线程)就一直阻塞 直到信号量sem的值大于等于零为止。

LINUX实现了POSIX的无名信号量,主要用于线程间的互斥与同步。只要用到以下几个常用函数:

sem_int 用于创建一个信号量,并能初始化它的值。

sem_wait和sem_trywait相当于P操作,它们都能将信号量减一,两者的区别在于信号量小于零时, sem_wait将会阻塞进程,而sem_trywait会立即返回。

sem_post 相当于V操作,将信号量的值加一同时发出信号唤醒等待线程。

sem_getvalue 用于得到信号量的值。

sem_destroy 用于删除信号量。

阅读(2721) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-06-17 23:05:20

cheapWomens MBT Chapa Shoe MBT Lami Shoe discountMBT Shoes on sale! MBT Shoes can lessen back pain and relieve neck tension. You will have a comfortable feeling like walking on sandy beach or on soft moss when you wear 回复 | 举报