您的位置:首页 > 运维架构 > Linux

linux编程原理之――多线程编程的同步互斥

2014-03-14 14:48 239 查看
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源.

互斥量用于线程的互斥,信号量用于线程的同步。信号量 只要信号量的value大于0,其他线程就可以sem_wait成功,成功后信号量的value减一。若value值不大于0,则sem_wait使得线程阻塞,直到sem_post释放后value值加一,但是sem_wait返回之前还是会将此value值减一

互 斥是二元信息灯,mutex被创建时可以有初始值,表示mutex被创建后,是锁定状态还是空闲状态。在同一个线程中,为了防止死锁,系统不允许连续两次 对Mutex加锁(系统一般会在第二次调用立刻返回)。也就是说,加锁和解锁这两个对应的操作,需要在同一个线程中完成。不同操作系统中提供的mutex函数:
动作\系统
Win32
Linux
Solaris
创建
CreateMutex
pthread_mutex_init
mutex_init
加锁
WaitForSingleObject
pthread_mutex_lock
mutex_lock
解锁
ReleaseMutex
pthread_mutex_unlock
mutex_unlock
销毁
CloseHandle
pthread_mutex_destroy
mutex_destroy
不同操作系统中的semaphore函数:

动作\系统
Win32
POSIX
创建
CreateSemaphore
sem_init
等待
WaitForSingleObject
sem _wait
释放
ReleaseMutex
sem _post
试图等待
WaitForSingleObject
sem _trywait
销毁
CloseHandle
sem_destroy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: