多執行緒之同時更改資料問題 啟用lock

2022-06-15 20:36:12 字數 1490 閱讀 7035

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

using

system.threading.tasks;

namespace

threaddemo

class

counterwithlock : counterbase

public

override

void

increment()

}public

override

void

decrement()}}

class

counter : counterbase

public

override

void

increment()

public

override

void

decrement()

}static

void

testcounter(counterbase c)

}static

void main(string

args)

", c.count);

console.writeline(

"--------------------------");

console.writeline(

"correct counter");

var c1 = new

counterwithlock();

t1 = new thread(() =>testcounter(c1));

t2 = new thread(() =>testcounter(c1));

t3 = new thread(() =>testcounter(c1));

t1.start();

t2.start();

t3.start();

t1.join();

t2.join();

t3.join();

console.writeline(

"total count:

", c1.count);

console.readkey();}}

}

第一次執行結果:

第二次執行結果:

可以看到,開了3個執行緒,對同乙個變數進行++操作,如果沒有lock,則結果不可預知;lock之後,則結果正常。

多執行緒修改資料的邏輯問題

在實際開發過程中,不得已的情況下需要去更新資料庫某個或多個字段,假如需要更新的字段目標值是乙個固定值,那麼用update語句就可以實現,資料量比較大的情況下,一般也不會有問題。如果說需要更新的字段目標值是需要依賴同一條記錄其他欄位做一定計算的結果,這時可以選擇使用sql,也可使用 去實現。再如果說這...

多執行緒之買票問題

package com.lyon.controller public class testthread2 implements runnable try catch interruptedexception e system.out.println thread.currentthread getn...

多執行緒程式設計之執行緒死鎖問題

在多執行緒程式設計中,除了要解決資料訪問的同步與互斥之外,還需要解決的重要問題就是多執行緒的死鎖問題。所謂死鎖 是指兩個或兩個以上的程序 執行緒 在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外部處理作用,它們都將無限等待下去。一 死鎖原因與形成條件 死鎖形成的原因 系統資源不足 程序 執...