linux fprintf如何实现多线程安全

   2024-10-01 9580
核心提示:在Linux中,为了确保fprintf在多线程环境下的安全性,您可以使用互斥锁(mutex)来同步对共享资源(例如文件描述符)的访问#incl

在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函数解锁互斥锁。这样可以确保在任何时候只有一个线程能够访问文件,从而实现多线程安全。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号