執行緒安全的Generic Dictionary

2021-09-05 14:50:35 字數 747 閱讀 8966

system.collections.generic.dictionary<,>

只要不修改該集合,dictionary

就可以同時支援多個閱讀器。即便如此,從頭到尾對乙個集合進行列舉本質上並不是乙個執行緒安全的過程。當出現列舉與寫訪問互相爭用這種極少發生的情況時,必須在整個列舉過程中鎖定集合。若要允許多個執行緒訪問集合以進行讀寫操作,則必須實現自己的同步。今天解決了使用dictionary泛型類的時候出現乙個錯誤 「system.invalidopervationexception "集合已經修改,可能無法執行列舉操作"」。原來的**如下:

private

void

checkingtimeout() 

}foreach

(string

key 

inlist)}} 

public

void

unloadsession(

string

sessionid)}}

錯誤出現的原因是**中在列舉的過程中修改了集合,而造成了這個錯誤,修改後的**如下:

private

void

checkingtimeout()

}foreach

(string

key 

inlist)}}

private

void

unregistersession(

string

sessionid)}}

執行緒安全與非執行緒安全的區別

執行緒安全 是多執行緒訪問時,採用加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。非執行緒安全 是多執行緒訪問時,不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料是髒資料。所得資料...

執行緒安全(常用的執行緒安全類)

string中的stringbuffer list集合中的vector copyonwritearraylist reentrantlock lock鎖 是執行緒安全的arraylist vector是增刪改查方法都加了synchronized,保證同步,但是每個方法執行的時候都要去獲得鎖,效能就會...

PHP執行緒安全與非執行緒安全的區別

原文 windows版的php從版本5.2.1開始有thread safe 執行緒安全 和none thread safe nts,非執行緒安全 之分,這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。因此,如果是使用isapi的方式來執行php就必須用thread safe 執行緒安全 的...