2013-02-05 24 views
-1

我的平臺是vs2010 win2003服務器,我的應用程序運行良好。有一個整數由臨界區保護,當我修改並使用boost :: detail :: spinlock代替時,它會進入死鎖。用boost :: detail :: spinlock替換關鍵部分在Windows上導致死鎖

+0

Soooo你試圖解決這個問題的是什麼? –

+0

爲什麼需要改變時它運作良好?順便說一句,這是唯一的改變嗎? – Jagannath

+0

@DenisErmolin我使用Interlockedxx api來暫時解決它,但真正的原因仍然沒有找到。 – magicyang

回答

2
  1. 這是boost::detail::spinlock。這意味着它僅供內部使用。如果您需要便攜式更換關鍵部分,請使用boost::mutex from Boost.Thread

  2. 這是boost::detail::spinlock。螺旋鎖通常忙碌等待,這使得它們更快,但只有在嚴格控制的條件下才能使用。

  3. Boost 1.53(最新版本)終於得到Boost.Atomic,這是一種便攜式(和C++ 11兼容)互鎖操作的替代品。

+0

如果只是爲了內部使用,也許它是智能指針或其他人崩潰。我會嘗試最新的提升,謝謝。 – magicyang

+1

@magicyang:Boost經常在'details'子名稱空間中重新實現一些通用基礎設施,以保持組件獨立。但是這樣做會造成各種複雜的假設,這些假設對於升壓代碼來說是正確的,這使得這些位在您自己的代碼中無法使用。 –