多线程同步问题(1)互斥锁和条件变量

本文深入探讨了多线程编程中的同步问题,包括互斥锁、读写锁及条件变量等常用同步机制的原理与使用方法,并对比了它们之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一段时间学习了很多关于多线程的东西,同时项目中也多是此类东西,因此记录一下

1.多线程的问题在于同步,主要是各个线程的时间片分配,不能总是给一个线程cpu时间,让其他线程没有cpu可用

2.多线程同步有很多种方法,目前工作中用到的多是互斥锁,读写锁,条件变量等。

3.各种方法的解释:

互斥锁:互斥锁的理解很简单,就是当我用了这把锁之后,在我把锁释放之前,都不能够给别人用。

int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

其中mutex既可以动态创建也可以静态创建。

在加锁和解锁之间操作要变更的变量。



读写锁的理解和互斥锁基本一致,但是读写锁的区别在于:只能操作其中的读或者写。


条件变量:条件变量就是用来等待条件信号成立,然后可以继续向下运行。相对于互斥锁更为灵活。

int pthread_cond_wait(pthread_cond_t* cond, pthrad_condattr_t* cord_attr);该函数等待cond信号。

int pthread_cond_signal(pthread_cond_t* cond);

int pthread_cond_broadcast(pthread_cond_t* cond);

下面两个函数返回cond信号,不过singal只是按顺序释放需要cond的函数,而broadcast释放所有的函数。


当然还有自旋锁,还在学习中,暂时用到的不到,最近看内核的时候发现里面有用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值