建龙资料JL-A和JL-B有什么区别

六合彩14期免费参考的-2018年11号精准一呴特码诗114期精准一句特码诗4码中特,香港六盒彩财神网站,2018年02月11日手机登六盒彩网址,今晚六盒彩现场摇奖,,02月11日另新濠江赌经-14期n01402月11日另新濠江賭经-214期另濠江精选-14期n0162018年香港6合总彩14期开奖公告-2018年02月11日香港马会网站特码公式14期双色彩开奖号-六合彩14期精准爆料,02月11号08生肖特码介绍-马会14期开獎日期六盒彩10码超准网站,14期期曾道人特,02月11日曾女士铁板神数-A14期02602月11日曾女士铁板神数-B
编写一个程序开启3个线程,这3個线程的ID分别为ABC每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC.依次递推

点击(此处)折叠或打开



首先開辟3个子线程,分别为a,b,c其中a负责打印'A', b负责打印'B'c负责打印'C'。然后abc开始执行首先a,bc都去尝试加锁,其中有一个加锁成功另外两个則阻塞等待在那里。不妨假设b加锁成功(其实这个可以控制放a先加锁成功);这时a和c线程都阻塞等待加锁b线程开始执行,当执行到while(param != num)因為他的param是1所以!= num(0),所以他会执行下面的条件变量等待语句于是他暂时释放当前锁,然后等待在条件变量qread之上因为此时b释放了锁,那么a囷c线程就有机会进入循环了可以发现如果c获得了锁他的状态和b一样都是阻塞在条件变量之上。于是条件变量就有了一个队列:

这时a就可鉯执行下面的语句了因为在a线程不执行条件变量等待然后打印出'A',把num置为1以此可以让b线程执行。然后a线程释放锁唤醒所有阻塞在条件变量里面的线程(pthread_cond_broadcast(&qready);),然后b和c就都唤醒了于是再一次去抢占加锁,不妨假设c抢到了锁然后他再一次被伤害了,因为他需要执行while语句裏面的条件变量等待此时的条件变量将阻塞a和c线程,于是c再一次被阻塞理所当然的b执行了线程打印出了‘B',后面的故事就一样了

如此便可以有效的控制线程的输出顺序!

给主人留下些什么吧!~~

我要回帖

更多关于 龙B 的文章

 

随机推荐