今天笔试遇到这样一个题目:
给定m,n两个数(m为线程数,n为打印次数),顺序打印:
aAbBcCdD...yYzZaAbBcCdD...yYzZ
假定m=3,n=4,编码完成如下效果:
aAbBcCdD...yYzZaAbBcCdD...yYzZaAbBcCdD...yYzZaAbBcCdD...yYzZ
https://blog.csdn.net/m0_37643606/article/details/107933398
你可以去看看这个,应该是你要找的东西
https://blog.csdn.net/weixin_42670775/article/details/108056116
这个主要考察线程协同工作问题,同步既多个线程配合完成某项任务,依据题意可知需要打印的数据为“aAbBcCdD...yYzZaAbBcCdD...yYzZ”
打印结果:aAbBcCdD...yYzZaAbBcCdD...yYzZaAbBcCdD...yYzZaAbBcCdD...yYzZ,又已知假定m=3,n=4,
所以设线程t1,t2,t3,每个线程打印4次结束。那么可以进行如下任务分配t1:打印aAbB,t2打印cCdD,t3打印yYzZ;
该项任务序列为 t1->t2->t3.如何保证线程之间的协同工作呢?设信号量为S1,S2,S3,初始值S1=1,S2=0,S3=0,
t1{ if S1>0 print; S1=S1-1;S2=S2+1}
t2{ if S2>0 print;S2=S2-1;S3=S3+1}
t3{ if S3>0 print;S3=S3-1;S1=S1+1}
当然可以设置打印位置信息,但是题目只要求打印结果对就可以,所以只需按以分配好的打印内容执行即可。