執行緒同步作業(一) Lock,monitor

2021-04-19 02:05:12 字數 772 閱讀 5885

開發的系統有這樣乙個功能:產生單據號碼。我的做法是檢視資料表中單據號碼字段當前值,在此基礎上加1生成新的單據號碼並儲存。原本沒有想太多,但是我們老大看了後,跟我說,如果有兩個使用者同時訪問到這個單據號碼,那麼新產生的號碼對於資料表來說是重複的,怎麼辦?

這就涉及乙個多使用者訪問共享資源的問題。如果該資源是唯讀的,沒有問題,但是如果每個使用者都可以對其更新操作,就會出現資料同步的問題。說到這裡,想起來,上學的時候學習資料庫就學過的銀行取款的問題,記得當時的解決方案是加鎖,當然今天要解決這個問題依然是加鎖。

如果究其原因,可以知道,實際上這裡涉及的是乙個執行緒同步的問題(多使用者實際上對伺服器來說就是多執行緒的訪問),msdn中對執行緒同步的講述和解決方案解釋的很詳細。系統中關於共享訪問資源(資料)的**為關鍵**,如果要實現同步,必須在乙個執行緒訪問的時候,對這段**加鎖控制。等這個執行緒訪問完畢,釋放鎖,允許第二個執行緒的訪問,以此類推

方案有很多,今天先闡述經常用到的:monitor, lock關鍵字

測試**:

using

system;

using

system.collections.generic;

using

system.text;

using

system.threading;

namespace

demo1

private

static

void

foo()

}實際上,上述兩種方式時等價的(msdn的說法)。 

執行緒同步(一)

一 鎖物件 示例 mylock.lock a reentrantlock objecttryfinal 這一結構確保任何時刻只有乙個執行緒進入臨界區。一旦乙個執行緒封鎖了鎖物件,其它任何執行緒都無法通過lock語句。當其它執行緒呼叫lock時,它們被阻塞,直到第乙個執行緒釋放鎖物件。注意 1 此鎖物...

執行緒同步(一)

執行緒同步 即當有乙個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體位址進行操作,直到該執行緒完成操作,其他執行緒才能對該記憶體位址進行操作,而其他執行緒又處於等待狀態,實現執行緒同步的方法有很多,臨界區物件就是其中一種。臨界區 當兩個執行緒競爭同一資源時,如果對資源的訪問順序敏感,就稱...

Linux 執行緒同步(一)

執行緒為什麼要同步 1.共享資源,多個執行緒可以對共享資源操作 2.由於併發原因,執行緒操作共享資源操作順序不一樣,可能會造成髒資料 3.處理器對儲存器的操作一般不是原子操作。臨界區 critical section 臨界區為了保證在某一時刻只有乙個執行緒能訪問資料的簡便方法,在任意時刻只允許乙個執...