MST

星途 面试题库

面试题:C语言中Linux线程同步之互斥锁问题

在Linux环境下使用C语言编程,简述互斥锁的作用以及如何使用互斥锁来同步线程。请给出简单的代码示例,包含初始化、加锁、解锁和销毁互斥锁的过程。
34.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

互斥锁的作用

互斥锁(Mutex,即Mutual Exclusion的缩写)是一种同步原语,用于保护共享资源,确保在同一时间只有一个线程能够访问该资源,从而避免多个线程同时访问共享资源导致的数据竞争和不一致问题。

使用互斥锁同步线程的步骤

  1. 初始化互斥锁:使用pthread_mutex_init函数对互斥锁进行初始化。
  2. 加锁:在线程访问共享资源前,使用pthread_mutex_lock函数获取互斥锁,若互斥锁已被其他线程持有,则当前线程会被阻塞,直到获取到互斥锁。
  3. 解锁:在访问完共享资源后,使用pthread_mutex_unlock函数释放互斥锁,允许其他线程获取互斥锁访问共享资源。
  4. 销毁互斥锁:当不再需要使用互斥锁时,使用pthread_mutex_destroy函数销毁互斥锁,释放相关资源。

代码示例

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

// 共享资源
int shared_variable = 0;
// 互斥锁
pthread_mutex_t mutex;

// 线程执行函数
void* increment(void* arg) {
    // 加锁
    pthread_mutex_lock(&mutex);
    shared_variable++;
    printf("Thread incremented shared_variable to %d\n", shared_variable);
    // 解锁
    pthread_mutex_unlock(&mutex);
    return NULL;
}

int main() {
    pthread_t thread1, thread2;

    // 初始化互斥锁
    pthread_mutex_init(&mutex, NULL);

    // 创建线程
    pthread_create(&thread1, NULL, increment, NULL);
    pthread_create(&thread2, NULL, increment, NULL);

    // 等待线程结束
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

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

    return 0;
}