比較好的博客文章:html
https://www.cnblogs.com/wyt007/p/9486752.html安全
知識點:異步
在解釋死鎖如何發生以及如何阻止死鎖的過程當中,你彷佛遇到了問題。this
當兩個( 最小二) 線程試圖獲取已經被另外一個鎖鎖定的資源的鎖時,就會發生死鎖。 線程 1鎖定資源 1嘗試獲取對資源 2的鎖定。 同時,線程 2對資源 2有一個鎖,它嘗試獲取對資源 1的鎖。 兩個線程永遠不會放棄鎖,所以發生死鎖。spa
避免死鎖的最簡單方法是使用超時值。 Monitor類( system.threading.monitor ) 能夠在獲取鎖期間設置超時。線程
例子code
1
2
3
4
5
6
7
8
9
10
11
|
if
(Monitor.TryEnter(
this
, 500))
{
//critical section
}
catch
(Exception ex)
{
}
finally
{
Monitor.Exit();
}
|
下表列出了 Thread 類的一些經常使用的 屬性:htm
屬性 | 描述 |
---|---|
CurrentContext | 獲取線程正在其中執行的當前上下文。 |
CurrentCulture | 獲取或設置當前線程的區域性。 |
CurrentPrinciple | 獲取或設置線程的當前負責人(對基於角色的安全性而言)。 |
CurrentThread | 獲取當前正在運行的線程。 |
CurrentUICulture | 獲取或設置資源管理器使用的當前區域性以便在運行時查找區域性特定的資源。 |
ExecutionContext | 獲取一個 ExecutionContext 對象,該對象包含有關當前線程的各類上下文的信息。 |
IsAlive | 獲取一個值,該值指示當前線程的執行狀態。 |
IsBackground | 獲取或設置一個值,該值指示某個線程是否爲後臺線程。 |
IsThreadPoolThread | 獲取一個值,該值指示線程是否屬於託管線程池。 |
ManagedThreadId | 獲取當前託管線程的惟一標識符。 |
Name | 獲取或設置線程的名稱。 |
Priority | 獲取或設置一個值,該值指示線程的調度優先級。 |
ThreadState | 獲取一個值,該值包含當前線程的狀態。 |
下表列出了 Thread 類的一些經常使用的 方法:對象