簡體   English   中英

使用專用線程進行文件輸出

[英]Using a dedicated thread for file output

我有一個模擬主題公園的多線程程序,並將日志消息寫入給定的文本文件。 我最初試圖讓每個線程都寫入文件,但是由於線程訪問文件指針而遇到錯誤。

取而代之的是,建議我使用專用線程進行寫入,然后以所有其他方法將緩沖區寫入該特定線程隨后將寫入文件的緩沖區。 顯然,我需要一個互斥鎖來同步對緩沖區的訪問,但是有一種方法可以在每次緩沖區寫完之后首先向寫線程發出信號,以便它有機會在將互斥體通知給每個嘗試執行的方法之前,將緩沖區寫到文件中。寫到緩沖區?

我通過使用2個互斥鎖解決了我的問題。 第一個在執行開始時被鎖定。 當寫入緩沖區時,第二個被鎖定。 一旦寫入完成,第一個互斥鎖將被解鎖,從而允許線程寫入輸出。 一旦寫入輸出,它將解鎖第二個互斥鎖,以便可以將其他內容寫入緩沖區。

輸出線程:

void *output_logging(void *path)
{
    while(END)
    {
        FILE *write = fopen(path, "w+");
        while(1)
        {
            pthread_mutex_lock(&tlock);
            fputs(BUFFER, write);
            pthread_mutex_unlock(&write_lock);
        }
    }
}

和一個寫的例子:

pthread_mutex_lock(&write_lock);
sprintf(BUFFER, "Beginning of Simulation\n");
pthread_mutex_unlock(&tlock);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM