我是靠谱客的博主 超级蜜蜂,最近开发中收集的这篇文章主要介绍Linux 多线程同步机制:互斥量、信号量、条件变量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

互斥量:互斥量提供对共享资源的保护访问,它的两种状态:lock和unlock,用来保证某段时间内只有一个线程使用共享资源,互斥量的数据类型是pthread_mutex_t
主要涉及函数:pthread_mutex_lock() pthread_mutex_trylock() pthread_mutex_unlock()
Pthreaf_mutex_init() pthread_mutex_destroy()
lock与unlock之间所锁定的区域为临界区域(如果只加锁不解锁程序会阻塞等待)
信号量:信号量是一个特殊的整数值,主要用来控制多个线程(进程)对临界资源的互斥访问,线程根据信号量来判断是否有访问的资源,信号量是一种线程同步机制,信号量与信号不同。
信号量是一个计数器,可用于同步多线程对共享数据对象得访问,为了获得共享资源,线程需要执行以下操作:
1、测试控制该资源的信号量
2、若此信号量的值为正,则线程可以使用该资源,线程将信号量值减1,表示它使用了一个资源单位
3、若此信号量的值为0,则线程进入睡眠状态,直至信号量值大于0。当线程被唤醒后,它返回至第1步。
条件变量: 只用互斥量很可能会引起死锁,为此引入了条件变量,条件变量允许线程阻塞和等待另一个线程发送的信号,使用条件变量可以以原子方式阻塞线程,直到满足某个条件为止,可以避免忙等。
条件变量常和互斥锁一起使用,互斥量主要用来保证对临界区的互斥进入,而条件变量则用于线程的阻塞等待,互斥锁定进入临界区以后,若条件不满足,线程便转为等待状态,等待条件满足后被唤醒执行,否则继续执行,执行完后开锁
条件变量的数据类型是pthread_cond_t
主要涉及函数:pthread_cond_init() pthread_cond_signal() pthread_cond_wait()
Pthread_cond_timewait() pthread_cond_broadcast()
Pthread_cond_wait()函数作用:
1.先对传入的互斥量mutex解锁(自动释放即解锁)
2.再wait阻塞等待(阻塞被别的线程的pthread_cond_singal()唤醒后必须先加锁再执行)

读写锁rwlock:
分为:rdlock(读锁):只要没有线程持有某个给定的读写锁用于写,那么任意数目的线程可以持有该读写锁用于读,共享锁
wrlock(写锁):仅当没有线程持有某个给定的读写锁用于读或者写时,才能分配该读写锁用于写,独占锁
pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;(初始化读写锁)
pthread_rwlock_rdlock(&rwlock):分配读锁
pthread_rwlock_wrlock(&rwlock):分配写锁
pthread_rwlock_unlock(&rwlock):解锁(只有解读写锁)

写锁解锁后多个线程在同等条件下分配读锁和写锁时先分配写锁(优先考虑分配写锁,但这不是必须的(系统不同))

转载于:https://blog.51cto.com/13665347/2095435

最后

以上就是超级蜜蜂为你收集整理的Linux 多线程同步机制:互斥量、信号量、条件变量的全部内容,希望文章能够帮你解决Linux 多线程同步机制:互斥量、信号量、条件变量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部