託管C 執行緒鎖實現

2021-08-18 06:54:44 字數 798 閱讀 4117

最近由於工作需要,開始寫託管c++,由於c++11中的mutex,和future等類,託管c++不讓呼叫(報錯),所以自己實現了託管c++的執行緒鎖。

該類可確保當乙個執行緒位於**的臨界區時,另乙個執行緒不會進入該臨界區。 如果其他執行緒嘗試進入鎖定的**,則它將一直等待(即被阻止),直到該物件被釋放。

using namespace system;

using namespace system::threading;

ref class lock

~lock()

private:

object ^ m_pobject;

};

注:原則上m_pobject是可以為任意型別,但是string是乙個例外。

string也是應用型別,從語法上來說是沒有錯的。

但是鎖定字串尤其危險,因為字串被公共語言執行庫 (clr)「暫留」。 這意味著整個程式中任何給定字串都只有乙個例項,就是這同乙個物件表示了所有執行的應用程式域的所有執行緒中的該文字。因此,只要在應用程式程序中的任何位置處具有相同內容的字串上放置了鎖,就將鎖定應用程式中該字串的所有例項。通常,最好避免鎖定 public 型別或鎖定不受應用程式控制的物件例項。例如,如果該例項可以被公開訪問,則 lock(this) 可能會有問題,因為不受控制的**也可能會鎖定該物件。這可能導致死鎖,即兩個或更多個執行緒等待釋放同一物件。出於同樣的原因,鎖定公共資料型別(相比於物件)也可能導致問題。而且lock(this)只對當前物件有效,如果多個物件之間就達不到同步的效果。lock(typeof(class))與鎖定字串一樣,範圍太廣了。

C 實現多執行緒讀寫鎖

在win32下用c 實現多執行緒讀寫鎖 讀寫鎖實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。這種鎖相對於自旋鎖而言,能提高併發性,因為在多處理器系統中,它允許同時有多個讀者來訪問共享資源,最大可能的讀者數為實際的邏輯cpu...

用C 實現多執行緒Mutex鎖

準備知識 1,核心物件互斥體 mutex 的工作機理,waitforsingleobject函式的用法,這些可以從msdn獲取詳情 2,當兩個或更多執行緒需要同時訪問乙個共享資源時,系統需要使用同步機制來確保一次只有乙個執行緒使用該資源。mutex 是同步基元,它只向乙個執行緒授予對共享資源的獨佔訪...

C 中 託管執行緒的狀態

試著畫了乙個狀態圖,不一定對 乙個執行緒至少總是處於 threadstate 列舉中的乙個可能狀態,並且可以同時處於多個狀態。進入託管環境的非託管執行緒已處於已啟動狀態。執行緒在啟動狀態後,許多操作都可使執行緒更改狀態。下表列出使狀態發生更改的操作以及相應的新狀態。操作 由於 running 狀態的...