如何在c中获取多个互斥锁

时间:2017-04-22 17:37:03

标签: c multithreading

我有一个要做的任务,我有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的方式是正确的吗?或者有更好的方法吗?

如果有更好的方法,有人可以向我解释一下,并提供一些示例代码吗?

0 个答案:

没有答案