我有一個本地的Visual C++ COM對象,我需要使它完全線程安全才能在系統註冊表中合法地將其標記爲「自由線程」。具體而言,我需要確保不超過一個線程同時訪問對象的任何成員變量。這會使對象線程安全嗎?
問題是我幾乎可以肯定,我的COM對象的任何理智的使用者都不會嘗試同時使用來自多個線程的對象。所以我希望解決方案儘可能簡單,只要符合上述要求即可。
這是我想出來的。我添加一個互斥或臨界區作爲對象的成員變量。每個COM暴露的方法都會在返回控制之前在開始和釋放時獲取互斥鎖/節。
我明白,這個解決方案不提供細粒度的訪問,這可能會減慢執行速度,但因爲我想同時訪問不會真的發生,我不在乎這一點。
此解決方案是否足夠?有一個更簡單的解決方案嗎?
如果您確定不會發生併發訪問,爲什麼要使它安全?是否將它標記爲自由線程有任何技術含義,或者您是否試圖做到這一點只是爲了確保? – Marek 2010-03-12 09:33:04
@Marek:Yeap,我需要將它標記爲自由線程以避免COM強制執行編組。我很樂意將它標記爲單元線程。 – sharptooth 2010-03-12 09:48:07