多线程ABCD面试题

这篇博客主要讨论了一个多线程面试问题,涉及四个线程ABCD按顺序轮流写入四个文件。在写入第5个文件时,实现B线程接替A线程进行写入。博主通过控制全局变量来实现线程间的协调和文件切换,详细解释了控制逻辑并提供了完整的代码实现。
摘要由CSDN通过智能技术生成

题目是这样的:

    编写一个程序,程序会启动4个线程,向4个文件A,B,C,D里写入数据,每个线程只能写一个值。 
    线程A:只写A
    线程B:只写B 
    线程C:只写C 
    线程D:只写D 

    4个文件A,B,C,D。 

    程序运行起来,4个文件的写入结果如下: 
        A:ABCDABCD... 
        B:BCDABCDA... 
        C:CDABCDAB... 
        D:DABCDABC... 

思路如下:
四个文件输出流轮流被写,通过控制一个变量的变化,来控制是那个线程来写文件。开始的四个字母写,ABCD四个线程按顺序轮流写入四个文件,第5个文件写的时候,要B线程写入到A文件,这时就控制全局变量在D线程写入以后,B线程接着写。我这里使用了全局变量。控制逻辑如下:

    void changeState(){    
    //Gcha的初始值为A
    if(count==3)
        Gcha=(Gcha-'A'+2)%4+'A';
    else
        Gcha=(Gcha-'A'+1)%4+'A';
    count=(count+1)%4;
    }

全部代码如下:

//https://blog.csdn.net/tcpipstack/article/details/45173633
//编写一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值