在Linux中,为了确保fprintf
在多线程环境下的安全性,您可以使用互斥锁(mutex)来同步对共享资源(例如文件描述符)的访问
#include#include #include // 定义互斥锁 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
函数解锁互斥锁。这样可以确保在任何时候只有一个线程能够访问文件,从而实现多线程安全。