多线程与互斥锁

疑问:

据说,多线程程序中,为了保证线程的顺序执行,可以使用互斥锁。

我有一个疑问,假如想达到线程顺序执行的目标,为什么不直接使用单线程呢?多线程+互斥锁,就是进入某一个线程,锁起来,不让其他线程执行;等该线程执行完毕,解锁之后才可以执行其他线程。这和单线程有区别吗?

还有,多线程是如何保证线程按顺序执行呢?假如某个线程中,并不是一进程序就加锁,而是加锁前有一段程序,那么多线程之间,那个先执行还不好说。

比如,线程1是,先延迟2s,然后加锁,执行某功能1,解锁;
线程2是,先延迟1s,然后加锁,执行某功能2,解锁;
执行步骤:线程1→→2;
结果就是,虽然线程1先执行,也有加锁功能,但却是线程2里面的功能2先执行,事与愿违!

假如线程里面没有延迟,而是一些语句,这个时候谁都不好说,到底是功能1还是功能2先执行,所以说好的保证线程按照顺序执行呢?

有人说,进线程我就加锁不就好了?这样和单线程真的就没有区别了……

合理的猜测:

如何保证线程之间按照顺序执行?
个人感觉用判断语句就可以了,线程1判断线程2是否完成,假如完成,就使用线程2的数据,然后完成线程1,假如没有,就等待……

互斥锁有什么用?
多个线程共享资源时,互斥锁可以保证一个线程使用的资源,不被另一个线程破坏;

比如264编解码,获取并储存一帧数据的进程,和编码一帧数据的进程,是以帧为单位相互独立的,而且不能打断对方。
当我储存数据的时候,要把当前数据帧储存完整,被打断的话,在储存数据就不是这一帧了;同样当我编码的时候,你给我打断,这个时候你储存数据,把我编码一般的帧数据给覆盖了,也是不行的!

总之,if可以保证按照顺序执行程序,但是互斥锁只能保证程序不被打断,而不能保证程序执行的顺序。

刚接触多线程,猜测可能会错,做个笔记先。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值