亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C# 讀寫鎖 ReaderWriteLock

系統 3302 0

??? ReaderWriterLock 用於同步存取資源。

? ? 它能在任何指定時間並行讀取多重執行緒或寫入單一執行緒。 如果資源不常變更, ReaderWriterLock 的產量優於每次一的鎖定 (例如 Monitor )。

??? 如果不常寫入 (而且寫入時間很短) 而是以讀取為主,則 ReaderWriterLock 最適合。 多重讀取器和單一寫入器交替,就不會長期鎖定讀取器和寫入器。

??? 長期保留讀取器鎖定或寫入器鎖定,會影響其他執行緒。 為獲得最佳效能,您不妨考慮重組應用程式將寫入期間縮至最小。

??? 執行緒可以保留讀取器鎖定或寫入器鎖定,但不能同時執行。

?? ? 與其釋放讀取器鎖定取得寫入器鎖定,您不妨使用 UpgradeToWriterLock DowngradeFromWriterLock

?? 遞迴鎖定要求會增加鎖定上的鎖定計數。

讀取器和寫入器是個別佇列。 執行緒釋放寫入器鎖定時,在讀取器佇列中等候的所有執行緒都會獲得讀取器鎖定;釋放所有讀取器鎖定時,在寫入器佇列中等候的下一個執行緒 (若有) 會獲得寫入器鎖定,以此類推。 換言之, ReaderWriterLock 在讀取器集合和寫入器集合之間交替。

寫入器佇列中的執行緒正在等候釋放讀取器鎖定時,要求新讀取器鎖定的執行緒也不斷在讀取器佇列中累積。 即使這些要求可以和現有讀取器鎖定的持有人共用並行存取,卻仍然不會同意這些要求;此一措施可以協助避免讀取器持續鎖定寫入器的情況。

大部分取得鎖定 ReaderWriterLock 的方法會接受逾時值。 逾時可用來避免應用程式鎖死。 例如,執行緒可能在一個資源上取得寫入器鎖定,並在第二個資源上取得讀取器鎖定;同時可能有另一個執行緒在第二個資源上取得寫入器鎖定,並在第一個資源上取得讀取器鎖定。 此時除非使用逾時,否則執行緒會鎖死。

如果逾時間隔到期但鎖定要求並未獲準,這個方法會擲回 ApplicationException ,將控制項傳回至呼叫執行緒。 執行緒可以攔截這個例外狀況,並決定下一個採取動作。

逾時值是以毫秒為單位。 如果您使用 System . TimeSpan 指定逾時,則會使用 TimeSpan 表示的毫秒總整數。 下表顯示有效的逾時值 (以毫秒為單位)。

?

?

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
// 讀線程鎖
static ReaderWriterLock m_ReadLock = new ReaderWriterLock();
static ReaderWriterLock m_WriteLock = new ReaderWriterLock();
// 資源
static int m_nResource = 0 ;

// 讀取資源線程
static void ReadProc()
{
for ( int i = 0 ; i < 5 ; i ++ )
{
ReadResource(
5000 );
Thread.Sleep(
500 );
}
}

// 寫入資源線程
static void WriteProc()
{
for ( int i = 0 ; i < 5 ; i ++ )
{
WriteResource(
5000 );
Thread.Sleep(
500 );
}
}

// 讀取資源
private static bool ReadResource( int timeout)
{
try
{
m_ReadLock.AcquireReaderLock(timeout);
try
{
Console.WriteLine(
" 成功獲得讀線程鎖, 資源值:{0} " , m_nResource);
}
finally
{
m_ReadLock.ReleaseReaderLock();
}
}
catch (ApplicationException ex)
{
Console.WriteLine(
" 獲取鎖超時:{0} " , ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(
" 獲取鎖異常:{0} " , ex.Message);
}
return true ;
}

// 寫入資源
private static bool WriteResource( int timeout)
{
try
{
m_WriteLock.AcquireWriterLock(timeout);
try
{
Console.WriteLine(
" 成功獲得寫線程鎖, 資源值:{0} " , m_nResource);
m_nResource
++ ;
Console.WriteLine(
" 寫入資源 {0} " , m_nResource);
}
finally
{
m_WriteLock.ReleaseWriterLock();
}
}
catch (ApplicationException ex)
{
Console.WriteLine(
" 獲取鎖超時:{0} " , ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(
" 獲取鎖異常:{0} " , ex.Message);
}
return true ;
}

static void Main( string [] args)
{
Thread t1
= new Thread( new ThreadStart(ReadProc));
Thread t2
= new Thread( new ThreadStart(WriteProc));
t1.Start();
t2.Start();

Thread.Sleep(
5000 );
Console.WriteLine(
" 按任意鍵退出... " );
Console.ReadKey();
}
}
}

C# 讀寫鎖 ReaderWriteLock


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久99精品久久久久子伦小说 | 99精品视频在线观看免费播放 | 久久这里只有精品免费播放 | 日日夜夜天天操 | 亚洲我射| 久久国产美女免费观看精品 | 久久99热这里只有精品国产 | 美日韩黄色大片 | 欧美无吗| videos欧美丰满肥婆 | 91亚洲精品福利在线播放 | 一级毛片一级毛片a毛片欧美 | 亚洲综合久久久久久中文字幕 | 色偷偷久久一区二区三区 | 久久国产精品系列 | 奇米网色| 99久热这里只有精品免费 | 国产成人性毛片 | 亚洲综合性图 | 欧美成人全部免费观看1314色 | 欧美精品a毛片免费观看 | 久久亚洲精品国产精品婷婷 | 午夜三级做爰视频在线看 | 精品久久久久久中文字幕一区 | 久久精品视频16 | 4虎最新网站 | 日本免费特黄aa毛片 | 国产精品免费看久久久 | 欧美日韩国产三级 | 四虎精品福利视频精品 | 精品欧美一区二区三区精品久久 | 国产一区二区久久 | 亚洲国产成人最新精品资源 | 亚洲 欧洲 另类 综合 自拍 | 日本工番囗番全彩本子大全 | 九天玄帝诀高清300集免费观看 | 四虎hu | 久久中文字幕综合不卡一二区 | 国产一区在线看 | 日韩免费成人 | 综合色播|