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 執行緒安全 的...