多线程调度

题目:

四个线程t1,t2,t3,t4,向4个文件里写入数据。t1仅仅能写入1,t2仅仅能写入2,t3仅仅能写入3,t4仅仅能写入4,对4个文件A,B,C,D写入例如以下内容
A:123412341234.....
B:234123412341....
C:341234123412....
D:412341234123....
怎么实现同步能够让线程并行工作?

以下是一种相对效率较低的做法,由于不论什么时候仅仅有一个线程在工作。


 
初始化信号量 S1 = 1, S2 = S3 = S4 = 0;
t1()
{
    static int i = 0;
    P(S1);
    if (i == 0)
        写A文件;
    else if (i == 1)
        写D文件;
    else if (i == 2)
        写C文件;
    else
        写B文件;
    i++;
    i = i % 4;
    V(S2);
}
            
t2()
{
    static int i = 3;
    P(S2);
    if (i == 0)
        写A文件;
    else if (i == 1)
        写D文件;
    else if (i == 2)
        写C文件;
    else
        写B文件;
    i++;
    i = i % 4;
    V(S3);
}
            
t3()
{
    static int i = 2;
    P(S3);
    if (i == 0)
        写A文件;
    else if (i == 1)
        写D文件;
    else if (i == 2)
        写C文件;
    else
        写B文件;
    i++;
    i = i % 4;
    V(S4);
}
            
t4()
{
    static int i = 1;
    P(s4);
    if (i == 0)
        写A文件;
    else if (i == 1)
        写D文件;
    else if (i == 2)
        写C文件;
    else
        写B文件;
    i++;
    i = i % 4;
    V(S1);
}


原文地址:https://www.cnblogs.com/mqxnongmin/p/10931713.html