中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
隆昌县| 台东县| 鸡西市| 乌兰察布市| 图木舒克市| 哈密市| 额尔古纳市| 柯坪县| 庄浪县| 紫阳县| 筠连县| 三门峡市| 五台县| 怀仁县| 行唐县| 新津县| 安福县| 新源县| 江门市| 同仁县| 齐河县| 沿河| 隆回县| 云南省| 沙河市| 监利县| 渝北区| 特克斯县| 南开区| 泰兴市| 晋州市| 平顺县| 昌平区| 逊克县| 鸡东县| 贡山| 思茅市| 大悟县| 平湖市| 花莲市| 陆河县|