c 執行緒同步

2021-09-19 13:40:40 字數 1002 閱讀 3805

以乙個程式來說明執行緒不同步所帶來的問題

class

program

private

int counter =0;

private

void

actionmethod()

\t", thread.currentthread.name, counter);}

}}

結果如下

從上面的結果中可以看到主線程和子執行緒都在爭奪actionmethod方法,在實際專案中會引起很多問題,我們期望的效果應該是子執行緒呼叫完後主執行緒再呼叫。

下面提供兩種常用的解決方法

1.為方法新增lock關鍵字

lock關鍵字可以確保一次只有乙個執行緒呼叫它。

lock關鍵字可以簡單理解成**塊的「鎖」。

private

void

actionmethod()

\t", thread.currentthread.name, counter);}

}}

2.新增[methodimpl(methodimploptions.synchronized)]方法屬性

[

methodimpl

(methodimploptions.synchronized)

]private

void

actionmethod()

\t", thread.currentthread.name, counter);}

}

我們看下修改後的效果

達到預期!

C 執行緒同步

volatile是最簡單的一種同步方法,當然簡單是要付出代價的。它只能在變數一級做同步,volatile的含義就是告訴處理器,不要將我放入工作記憶體,請直接在主存操作我。www.bitscn.com 因此,當多執行緒同時訪問該變數時,都將直接操作主存,從本質上做到了變數共享。能夠被標識為volati...

C 執行緒同步

使用mutex類來同步兩個單獨的程式。mutex是一種原始的同步方式,其只對乙個執行緒授予對共享資源的獨佔訪問。const string nutexname c using var m new mutex false nutexname else 互斥量是全域性的作業系統物件,請務必正確關閉互斥量。...

C 執行緒同步

同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。如程序 執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行 b依言執行,再將結果給a a再繼續操作。這裡的同步千萬不要理解成那個同時進行,應是指協同 協助 互相配合。執行緒同步是...