多執行緒(2)-執行緒同步互斥鎖Mutex

lethe1203發表於2024-04-04
在 Linux 多執行緒程式設計中,互斥鎖(Mutex)是一種常用的同步機制,用於保護共享資源,防止多個執行緒同時訪問導致的競爭條件。在 POSIX 執行緒庫中,互斥鎖通常透過 pthread_mutex_t 型別表示,相關的函式包括 pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock 等。
下面為一個demo,舉例說明在多執行緒中使用互斥鎖:
#include <stdio.h>
#include <pthread.h>

#define NUM_THREADS 5

// 共享資源
int shared_resource = 0;

// 互斥鎖
pthread_mutex_t mutex;

// 執行緒函式
void *thread_function(void *arg) {
    int thread_id = *((int *)arg);

    // 加鎖
    pthread_mutex_lock(&mutex);

    // 訪問共享資源
    printf("Thread %d: Shared resource before modification: %d\n", thread_id, shared_resource);
    sleep(1);
    shared_resource++;
    printf("Thread %d: Shared resource after modification: %d\n", thread_id, shared_resource);

    // 解鎖
    pthread_mutex_unlock(&mutex);

    pthread_exit(NULL);
}

int main() {
    pthread_t threads[NUM_THREADS];
    int thread_args[NUM_THREADS];
    int i;

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

    // 建立多個執行緒
    for (i = 0; i < NUM_THREADS; ++i) {
        thread_args[i] = i;
        pthread_create(&threads[i], NULL, thread_function, (void *)&thread_args[i]);
    }

    // 等待所有執行緒完成
    for (i = 0; i < NUM_THREADS; ++i) {
        pthread_join(threads[i], NULL);
    }

    // 銷燬互斥鎖
    pthread_mutex_destroy(&mutex);

    return 0;
}

執行結果如下:
0

相關文章