91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

linux fprintf如何實現多線程安全

小樊
85
2024-08-26 23:48:15
欄目: 智能運維

在Linux中,為了確保fprintf在多線程環境下的安全性,您可以使用互斥鎖(mutex)來同步對共享資源(例如文件描述符)的訪問

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

// 定義互斥鎖
pthread_mutex_t file_mutex = PTHREAD_MUTEX_INITIALIZER;

// 線程函數
void *thread_function(void *arg) {
    // 獲取互斥鎖
    pthread_mutex_lock(&file_mutex);

    // 使用fprintf輸出到文件
    FILE *file = fopen("output.txt", "a");
    if (file == NULL) {
        perror("Error opening file");
        exit(1);
    }
    fprintf(file, "Thread %ld: Hello, World!\n", (long)arg);
    fclose(file);

    // 釋放互斥鎖
    pthread_mutex_unlock(&file_mutex);

    return NULL;
}

int main() {
    const int NUM_THREADS = 5;
    pthread_t threads[NUM_THREADS];

    // 創建多個線程
    for (int i = 0; i < NUM_THREADS; i++) {
        pthread_create(&threads[i], NULL, thread_function, (void *)(long)i);
    }

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

    // 銷毀互斥鎖
    pthread_mutex_destroy(&file_mutex);

    return 0;
}

在這個示例中,我們創建了一個名為file_mutex的互斥鎖。在每個線程中,我們使用pthread_mutex_lock函數鎖定互斥鎖,然后使用fprintf將數據寫入文件。完成寫入后,我們使用pthread_mutex_unlock函數解鎖互斥鎖。這樣可以確保在任何時候只有一個線程能夠訪問文件,從而實現多線程安全。

0
汕尾市| 醴陵市| 绥德县| 乐东| 酒泉市| 饶阳县| 高平市| 平罗县| 萨嘎县| 池州市| 桃园县| 泰宁县| 固原市| 富锦市| 成都市| 山西省| 溧水县| 遂宁市| 西吉县| 新竹市| 长丰县| 广水市| 广汉市| 万州区| 铜梁县| 汨罗市| 淮阳县| 广东省| 泰和县| 南丰县| 罗城| 建昌县| 黑山县| 尚志市| 图片| 山西省| 扶风县| 文登市| 宣化县| 娄底市| 东港市|