2014-02-06 55 views
0

我注意到大多數記錄器被廣告爲線程安全。日誌記錄和多線程

這是什麼意思?

它們是否對特定線程庫安全,或者它們可以在任何多線程環境中安全(例如PThread,Boost線程,C++ 11線程,Win32線程,OpenMP線程等)?

+1

互斥體的概念不是庫特定的。通常記錄器確實使用互斥來阻止線程互相干擾。一個線程安全的記錄器是爲了在各種線程上運行。 – user1810087

+0

@ user1810087:從我可以[讀](https://groups.google.com/forum/#!topic/comp.programming.threads/Z-e5udakt98),互斥概念是庫特定的。但是,例如, OpenMP和Boost線程都基於PThreads(在UNIX中),它們使用相同的PThreads互斥體。也許這就是他們兼容的原因。 – Pietro

+0

它們並不具體,混合它們只是一個壞主意(也非常醜陋)。你甚至可以編寫你自己的互斥量,並在每一種線程中使用它,只要互斥量實例不是線程本地的。 – user1810087

回答

1

這意味着你不會得到這樣的事情在你的日誌文件:

this is the line from the firsThis is line from the second thread 
t thread 

通常這意味着記錄器使用所需的鎖定,當他們寫入到流中的任何支持的環境。

1

如果一個記錄器是線程安全的,這意味着你可以從任何線程調用它的函數(無論是線程或boost還是openmp)。通常通過使用互斥鎖來防止同時輸出。沒有它們,如果從不同的線程使用日誌,程序可能會輸出混合行或甚至崩潰。