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