我有一个要做的任务,我有5个线程。
3个线程负责写入3个不同的文件
1个线程负责计算时间
1个线程负责获取3个文件的内容,并在某个时刻将其写入另一个文件。
Thread0:
void *task0() {
//Trigger conditions to the threads below
}
Thread0:负责计算时间,并通知其他线程。
线程1:
void *task1(){
pthread_mutex_lock(&m1);
while (!cond1)
pthread_cond_wait(&cond1, &m1);
// do some stuff
cond1 = 0;
writeToFile("file1.txt");
pthread_mutex_unlock(&m1);
}
Thread1:Thread0在随机时间内通知Thread1。当Thread1处于唤醒状态时,它会将一些数据写入file1.txt。
线程2:
void *task2(){
pthread_mutex_lock(&m2);
while (!cond2)
pthread_cond_wait(&cond2, &m2);
// do some stuff
cond2 = 0;
writeToFile("file2.txt");
pthread_mutex_unlock(&m2);
}
Thread2:Thread0在一小时内通知Thread0一次。当Thread2处于唤醒状态时,它会将一些数据写入file2.txt。
Thread3:
void *task3(){
pthread_mutex_lock(&m3);
while (!cond3)
pthread_cond_wait(&cond3, &m3);
// do some stuff
cond3 = 0;
writeToFile("file3.txt");
pthread_mutex_unlock(&m3);
}
Thread3:Thread0每秒通知一次Thread3。当Thread3处于唤醒状态时,它会将一些数据写入file3.txt。
Thread4:
void *task4() {
pthread_mutex_lock(&m4)
while (!cond4)
pthread_cond_wait(&cond4, &m4);
if ((pthread_mutex_trylock(&m3) == 0) &&
(pthread_mutex_trylock(&m2) == 0) &&
(pthread_mutex_trylock(&m1) == 0)) {
// do some work
// Copy the content of file1.txt, file2.txt and file3.txt to file4.txt
writeToFile("file4.txt");
pthread_mutex_unlock(&m1);
pthread_mutex_unlock(&m2);
pthread_mutex_unlock(&m3);
}
pthread_mutex_unlock(&m4);
}
线程4:Thread4每2.5小时通知一次Thread4。当Thread4处于唤醒状态时,它获取file1,file2和file3的内容并放入file4。
因此,为了编写file4,我必须获取3个互斥量:m1,m2和m3,因为我有3个不同的关键部分(file1.txt,file2.txt和file3.txt)中的数据。
我的问题是:我访问Thread4中的3个关键部分,获取这些数据并将其放入file4的方式是正确的吗?或者有更好的方法吗?
如果有更好的方法,有人可以向我解释一下,并提供一些示例代码吗?