多執行緒下使用freopen函式遇到的問題

2021-07-25 02:29:44 字數 676 閱讀 6928

近期,專案中的乙個bug除錯了好久,專案使用freopen函式重定向stderr將日誌資訊輸出到檔案,會頻繁進行freopen呼叫。記錄下來備忘,也希望能尋找一下解決方法。網上關於freopen的大多只是怎麼使用

先說一下bug現象,通過fopen開啟的檔案返回的file*指標指向錯亂,專案中其他用到io操作的會導致檔案讀寫出錯。模擬專案的測試**:

測試**出錯的地方一般是a、b兩個檔案內容寫入交叉混合在了一起;

boost::mutex lock__;

void writelogthread()

}void xmlparsethread()

while (true)

}int main()

g_thread.create_thread(boost::bind(xmlparsethread));

scanf("%d",&endtag);

g_thread.join_all();

return 0;

}參考關於thread-safe c library functions段freopen的描述「thestdiolibrary is thread-safe if the_mutex_* functions are implemented.」沒明白具體什麼意思,猜測可能是需要加鎖吧,但加鎖還叫執行緒安全嗎?

freopen 函式的使用

當我們求解acm題目時,通常在設計好演算法和程式後,要在除錯環境 例如vc等 中執行程式,輸入測試資料,當能得到正確執行結果後,才將程式提交到oj中。但由於除錯往往不能一次成功,每次執行時,都要重新輸入一遍測試資料,對於有大量輸入資料的題目,輸入資料需要花費大量時間。使用freopen函式可以解決測...

PHP下使用多執行緒

本文以windows為例,講解安裝和使用php pthreads擴充套件。開啟 http localhost phpinfo 1 找到 php extension build 的版本 配置 php.ini 檔案,新增一行 extension php pthreads.dll重啟 apache 並檢視...

c 下使用多執行緒

執行緒主要由cup暫存器 呼叫棧 執行緒本地儲存器 thread local storage,tls 組成。cup暫存器主要記錄當前所執行執行緒的狀態,呼叫棧主要用於維護執行緒所呼叫到的記憶體和資料,tsl主要用於存放執行緒的狀態資訊。前台執行緒 只有所有的前台執行緒全部關閉,才能完成程式關閉。後台...