互斥量mutex的简单使用(实例讲解)



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

// 定义一个全局互斥量
pthread_mutex_t mutex;

// 线程运行的函数
void* thread_function(void* arg) {
    // 尝试加锁
    pthread_mutex_lock(&mutex);
    printf("线程 %ld 已获取互斥量并运行\n", (long)arg);

    // 模拟一些耗时操作
    sleep(1);

    // 释放互斥量
    pthread_mutex_unlock(&mutex);
    printf("线程 %ld 已释放互斥量\n", (long)arg);

    return NULL;
}

int main() {
    pthread_t threads[2];
    long thread_ids[2] = {1, 2};

    // 初始化互斥量
    if (pthread_mutex_init(&mutex, NULL) != 0) {
        printf("互斥量初始化失败\n");
        return 1;
    }

    // 创建线程
    for (int i = 0; i < 2; i++) {
        if (pthread_create(&threads[i], NULL, thread_function, (void*)&thread_ids[i]) != 0) {
            printf("线程创建失败\n");
            return 1;
        }
    }

    // 等待线程结束
    for (int i = 0; i < 2; i++) {
        pthread_join(threads[i], NULL);
    }

    // 销毁互斥量
    pthread_mutex_destroy(&mutex);

    return 0;
}

这段代码展示了互斥量(mutex)在C语言中使用pthread库的一个简单例子。程序中定义了一个全局的互斥量`mutex`,并在`main`函数中初始化它。然后,创建了两个线程,每个线程都尝试获取这个互斥量来执行一段代码(这里用`sleep(1);`来模拟耗时操作)。由于互斥量的互斥性,这两个线程将交替地获取和释放互斥量,从而保证了它们的执行是互斥的,即在同一时间只有一个线程能执行这段代码。最后,在`main`函数的末尾,销毁互斥量以释放资源。