你提出的问题很有趣。首先,我们可以注意到第一次执行时,循环执行了0~6共7次;而第二次执行时,从6开始到5只执行了2次,并且以后每次执行也仅执行2次。
基于你的描述,我建议使用互斥信号量来解决问题:
1. 初始化两个信号量pmutex1(有资源)和pmutex2(无资源),并把gnum初始化为0。
2. 启动两个线程:
2.1 线程1:
lock_the_mutex_signal(pmutex1); // 线程1上锁,等待执行
while (gnum < 5) { // 只要gnum小于5,线程1就一直执行下去 do_sth(); // 执行业务逻辑 gnum++; // 增加执行次数 }
unlock_the_mutex_signal(pmutex2); // 线程1解锁,让线程2执行
2.2 线程2:
lock_the_mutex_signal(pmutex2); // 线程2上锁,等待执行
while (gnum > 5) { // 只要gnum大于5,线程2就一直执行 do_sth(); // 执行业务逻辑 gnum--; // 减少执行次数 }
unlock_the_mutex_signal(pmutex1); // 线程2解锁,让线程1执行
注意:如果你不是非常严格地要求线程切换(即不允许被禁止执行的线程被调用),则该逻辑应该可以正常工作。这只是我的思路,如果有错误的地方,请自行纠正。
相关推荐
© 2023-2025 百科书库. All Rights Reserved.
我来回答