多线程调度
题目:
四个线程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);
}