MST

星途 面试题库

面试题:C语言中互斥锁的初始化与基本使用

在Linux环境下,使用C语言编写一个简单的多线程程序,利用互斥锁来确保共享资源(例如一个全局整型变量)的安全访问。要求展示互斥锁的初始化、加锁、解锁过程,并且每个线程对共享资源进行递增操作100次,最后输出共享资源的最终值。
15.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <pthread.h>

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

// 线程函数
void* increment(void* arg) {
    for (int i = 0; i < 100; ++i) {
        // 加锁
        pthread_mutex_lock(&mutex);
        shared_variable++;
        // 解锁
        pthread_mutex_unlock(&mutex);
    }
    return NULL;
}

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

    pthread_t thread1, thread2;

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

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

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

    printf("Final value of shared variable: %d\n", shared_variable);

    return 0;
}
  1. 共享资源定义:定义了一个全局整型变量shared_variable作为共享资源。
  2. 互斥锁定义:定义了一个pthread_mutex_t类型的互斥锁mutex
  3. 线程函数increment
    • 在循环中,每次对共享资源shared_variable进行递增操作前,使用pthread_mutex_lock加锁。
    • 递增操作完成后,使用pthread_mutex_unlock解锁。
  4. main函数
    • 使用pthread_mutex_init初始化互斥锁。
    • 创建两个线程,每个线程都执行increment函数。
    • 使用pthread_join等待两个线程执行完毕。
    • 使用pthread_mutex_destroy销毁互斥锁。
    • 最后输出共享资源shared_variable的最终值。