我在多個地方閱讀了Boost.Signals不是線程安全的,但我還沒有找到更多關於它的細節。這個簡單的引用並沒有說太多。現在大多數應用程序都有線程 - 即使它們嘗試使用單線程,它們的一些庫也可能使用線程(例如libsdl)。Boost:Boost.Signals中的線程安全究竟是什麼?
我想實現沒有其他線程沒有訪問插槽的問題。所以在這個意義上,它至少是線程安全的。
但究竟什麼工作,什麼不會工作?只要我沒有同時訪問它,它是否可以在多線程中使用它?即如果我在插槽周圍建立自己的互斥鎖?
或者我只是在我創建它的那個線程中強制使用槽?或者我第一次使用它的地方?
這已經有一段時間了......我的回答是否合理?基本上,信號庫*本身*不會崩潰,無論你從任何線程所做的調用,只要它們是「有效的」......但是你要對自己的代碼中的語義負責。 – HostileFork 2010-03-11 00:47:31
這是有道理的,但它並不真正回答我所有的問題。 :)基本上你說過「在源代碼中查找」。我會稍後再做,然後在這裏發佈所有我的問題的確切答案。 – Albert 2010-03-11 11:20:05
你確實問過「究竟有效,哪些不起作用?」我覺得這比解析狹義的具體問題更重要。(這些答案是「是的:如果你用一個互斥體來防守是好的,但是如果你的插槽的語義是一次多於一個的線程可以運行它們,這可能是不必要的;就像從多個線程調用任何其他函數一樣」和「不:你不限於只在創建它們的線程中使用插槽」) – HostileFork 2010-03-11 17:09:51