c语言中多线程的执行顺序,ReentrantLock实现 多线程顺序执行任务

本文介绍了如何使用ReentrantLock保证线程A、B、C按照顺序执行,避免使用sleep()。通过创建ReentrantLock锁和Condition,设置线程间的等待与唤醒机制,实现了ABC线程按序输出数字1到1000的过程。文章详细解释了ReentrantLock相对于synchronized的优势,并提供了完整代码示例。
摘要由CSDN通过智能技术生成

题目摘自:偏头痛杨

最近看了这位博主的文章 写的挺好的 跟着里面的线程 温习了一遍 结尾处有道题算是复习巩固吧

我是用ReentrantLock实现的 而不是synchronized

题目:使用3个线程,要求三个线程顺序执行,不允许使用sleep()强制让线程有顺序。线程A输出1线程B输出2线程C输出3线程A输出4线程B输出5以此类推,一直输出到1000为止。

题目是不是看着不难 一开始我也是这么觉得的

后来我发现自己错了 还错了很离谱…… 也许是自己思维不够灵活 花了一下午时间解决……

不过也算是初步掌握了 ReentrantLock的运用

讲一下思路吧

题目要求是ABC顺序依次输出结果

可线程是抢占式的,鬼会听你安排 一个一个输出哦 肯定都是抢着去占CPU线程是并发式的 意思就是 看起来像是一起执行 实际是一次只能执行一次线程

那怎么才可以让线程乖乖听话?

答:一个执行的时候 另外两个等待不就OK了比如 A执行的时候BC等待 A执行完后唤醒B执行 B执行完后唤醒C执行 C执行完后唤醒A执行 这样一直循环 就是ABCABC的执行顺序了

过程:

思路有了,那我们如何来实现呢?

一开始 脑子一蹦出来就是用synchronized来解决 后来想想不行啊

synchronized的唤醒方式有2种(学的不深 不知道是否还有其他方法)

1. notify() 随机唤醒一个线程

2. notifyAll() 唤醒全部线程

题目要求我们是按照顺序ABC来执行线程的 我滴个神啊 这tm不是断我路吗!

别急别急 还好有 ReentrantLock

题外话:

话说网上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值