在C中使用互斥锁同步两个pthread

时间:2013-02-12 19:21:20

标签: c pthreads mutex synchronize

需要帮助将两个线程与互斥锁同步。我刚接触C和互斥体,我不知道该怎么做。代码有两个线程,计数到十并打印出每个数字,但不同步,所以它不会打印同步,它是半同步。意味着我最终只会遇到麻烦,有时会打印8..9..11,8..9..10..10等等。

如果您删除有关互斥锁的行,即原始代码,我无法对原始代码进行更改。我只能添加关于互斥锁的行。

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

pthread_mutex_t mutex;

int g_ant = 0;

void *writeloop(void *arg) {
    while(g_ant < 10) {
        pthread_mutex_lock(&mutex);
        g_ant++;
        usleep(rand()%10);
        printf("%d\n", g_ant);
        pthread_mutex_unlock(&mutex);
    }
    exit(0);
}

int main(void)
{
    pthread_t tid;
    pthread_mutex_init(&mutex, NULL);
    pthread_create(&tid, NULL, writeloop, NULL);
    writeloop(NULL);
    pthread_join(tid, NULL);
    pthread_mutex_destroy(&mutex);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果您的互斥锁外部的条件可能没有收到正确的值。确保循环按顺序运行的有保证的方法是writeloop的以下更改:

void writeloop(void *arg) {
    while (g_ant < 10) {
        pthread_mutex_lock(&mutex);
        if (g_ant >= 10) {
            pthread_mutex_unlock(&mutex);
            break;
        }

        g_ant++;
        usleep(rand()%10);
        printf("%d\n", g_ant);
        pthread_mutex_unlock(&mutex);
    }
}