在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
函數解鎖互斥鎖。這樣可以確保在任何時候只有一個線程能夠訪問文件,從而實現多線程安全。