我正在嘗試實現許多使用ReaderWriterLockSlim進行線程安全的屬性。 所以最喜歡我結束了我的所有屬性是這樣的:在很多屬性中使用ReaderWriterLockSlim的更簡單的方法
public string Name
{
get
{
rwLock.EnterReadLock();
try {
return name;
}
finally {
rwLock.ExitReadLock();
}
}
set
{
rwLock.EnterWriteLock();
try {
name = value;
}
finally {
rwLock.ExitWriteLock();
}
}
}
這種感覺非常詳細,並在10種性質重複的,所以我要尋找一個更乾的實現。
顯而易見的解決方案是將其封裝到釋放對dispose的鎖定的類中,並允許將我的線程安全操作放入using語句中。顯然,根據this和其他一些來源,這不是很安全。
所以我試圖拿出一個好看的解決方案使用lambda表達式和匿名方法:
private TResult ThreadSafeRead<TResult>(Func<TResult> value)
{
rwLock.EnterReadLock();
try {
return value();
}
finally {
rwLock.ExitReadLock();
}
}
private void ThreadSafeWrite(Action value)
{
rwLock.EnterWriteLock();
try {
value();
}
finally {
rwLock.ExitWriteLock();
}
}
public string Name
{
get { return ThreadSafeRead(() => name); }
set { ThreadSafeWrite(() => { name = value; }); }
}
雖然這消除了重複代碼,這是討厭我,我不知道,如果它是作爲線程像我最初的詳細實施一樣安全。
有沒有人對MSIL有更深入的理解,這將會產生多線程 理論能夠告訴我我的實現是否安全?
這與線程安全無關。問題來自你的線程調用Thread.Abort。 – usr