mutex线程控制和信号量semaphore
2012-03-10 19:05
267 查看
linux应用程序使用到的保护机制 semaphore和pthread_mutex
1〉互斥锁线程控制: Mutex 是一种简单的加锁的方法来控制对共享资源的存取。这个互斥锁只有两行状态,上锁和解锁。可以把这种互斥锁看成是某种全局变量,在同一时间只有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作,若其他线程希望上锁一个已经上了锁的互斥锁。该线程就会挂起。直到上锁定线程释放掉互斥锁为止。 可以这么理解,互斥锁使共享资源按照一定的顺序在线程中被使用。 互斥锁操作主要包括以下几个步骤: 1, 互斥锁初始化:pthread_mutex_init 2, 互斥锁上锁: pthread_mutex_lock3, 互斥锁判断上锁: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 用于删除信号量。
相关文章推荐
- 浅析信号量(Semaphore)和互斥(Mutex)
- java线程--信号量Semaphore
- iOS控制高并发-dispatch_semaphore(信号量)的用法
- 互斥锁Mutex与信号量Semaphore的区别
- linux多线程学习(五)——信号量线程控制
- GCD 信号量控制并发(dispatch_semaphore)以及dispatch_group_async
- Linux驱动学习笔记(6)信号量(semaphore)与互斥量(mutex)【转】
- python中的线程之semaphore信号量
- linux多线程学习(五)——信号量线程控制
- 线程(七)信号量 Semaphore
- python基础-信号量Semaphore(进程_线程)、事件Event(进程_线程)
- mutex 互斥锁线程控制
- java多线程控制-信号量Semaphore
- 线程如何控制并发数量? Semaphore 线程协同类,用来控制线程并发数量
- 浅析信号量(Semaphore)和互斥(Mutex)
- 关于用信号量Semaphore实现互斥锁Mutex
- linux多线程学习(五)——信号量线程控制
- GCD 信号量控制并发 (dispatch_semaphore)
- windows C++ 用信号量控制线程
- C# 使用Semaphore(信号量)控制多线程