2012-01-21 104 views
1

使用多線程時,我需要確保我使用的boost類是可重入的(即使每個線程使用它自己的對象實例時)。重新加載

我很難在Boost的課堂文檔中找到關於班級重入的聲明。我在這裏錯過了什麼嗎?除非在文檔中另有明確說明,否則所有Boost類都是可重入的嗎?還是Boost關於重入的文檔是一個灰色地帶?

例如,我無法在文檔的任何位置找到有關boost :: numeric ::ublas∷matrix類重入的聲明。那麼我可以假設它是可重入的嗎?

謝謝!

奧弗

+1

我覺得你真的是線程安全。這與重入不同。 IIRC,重入是嚴格的關於一個函數在單線程併發調用情況下的行爲。線程安全是關於多線程時函數的表現。 –

+0

似乎有多個定義可重入。我在Qt的文檔中使用了這個概念: http://developer.qt.nokia.com/doc/qt-4.8/threads-reentrancy.html – Ofer

回答

1

大多數升壓的是類似於大多數的STL和C++標準庫在於:

  • 同時創建兩個線程類型的兩個實例就可以了。
  • 在兩個線程中同時使用兩個類型的實例是可以的。
  • 同時在兩個線程中使用單個對象通常是不正確的。
  • 但是,對兩個線程中的一個對象執行只讀操作通常是可以的。
  • 通常沒有特別的努力來「增強」線程安全性,除非特別需要這樣做,例如shared_ptr,Asio,Signals2(但不是Signals)等等。看起來像價值類型的Boost部分(例如您的矩陣示例)可能根本沒有任何特殊的線程安全支持,因此無法提供給應用程序。
+0

謝謝! 你真的幫了忙 – Ofer