成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#中Finally的一個(gè)不太常見的用法

開發(fā) 后端
這其實(shí)是一個(gè)小的技巧:放在Finally中的代碼可以防止執(zhí)行線程在執(zhí)行過程中被另一個(gè)線程用調(diào)用了Thread.Abort()或Thread. Interrupt()打斷.從而保證這段代碼執(zhí)行的完整性。

最近在看.net BCL 傳送門 的源碼. 在

System.Collections.Concurrent.ConcurrentQueue

中看到一段有意思的代碼.注意這段代碼是寫在ConcurrentQueue這個(gè)用于并發(fā)中的隊(duì)列. 注意,這是一個(gè)無鎖隊(duì)列的實(shí)現(xiàn).

  1. try 
  2.  { }  
  3.  finally 
  4.  {  
  5.      newhigh = Interlocked.Increment(ref m_high);  
  6.      if (newhigh <= SEGMENT_SIZE - 1)  
  7.      {  
  8.          m_array[newhigh] = value;  
  9.          m_state[newhigh].m_value = true;  
  10.      }  
  11.      if (newhigh == SEGMENT_SIZE - 1)  
  12.      {  
  13.          Grow();  
  14.      }  
  15.  } 
有意思嗎?代碼中使用了一個(gè)空的Try代碼塊.然后把代碼全都寫在了Finally塊.這么做的目地何在呢?

這其實(shí)是一個(gè)小的技巧:放在Finally中的代碼可以防止執(zhí)行線程在執(zhí)行過程中被另一個(gè)線程用調(diào)用了Thread.Abort()或Thread. Interrupt()打斷.從而保證這段代碼執(zhí)行的完整性。

舉個(gè)例子: 如果不將上面代碼放到Finally中運(yùn)行.假如正好有一個(gè)線程A執(zhí)行到 m_array[newhigh] = value;而另外一個(gè)線程B調(diào)用了線程A的Thread.Abort() 那么m_array[newhigh] = value; 以后的代碼可能沒有機(jī)會(huì)得到執(zhí)行.那么將引起ConcurrentQueue的不完整。

而放到Finally中的代碼,即使線程B在線程A執(zhí)行時(shí)調(diào)用了Thread.Abort()或Thread. Interrupt()方法時(shí)也能保證Finally塊中的代碼被完整的執(zhí)行。

事實(shí)上,這個(gè)特性是在.net framework2.0中引入的.在.net 1.1時(shí)Finally沒有這個(gè)作用.另外 Tread.Abort有可能打斷線程內(nèi)的靜態(tài)構(gòu)構(gòu)函數(shù)執(zhí)行。

另外我認(rèn)為同樣的功能也可以用這個(gè)Thread.BeginCriticalRegion 和Thread.EndCriticalRegion(); 來實(shí)現(xiàn)。

原文鏈接:http://www.cnblogs.com/listhome/p/3664300.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2009-07-30 18:18:27

C#時(shí)間計(jì)算

2009-07-22 17:15:04

C#實(shí)現(xiàn)

2009-08-18 17:19:33

C#事件模型

2011-07-06 10:47:52

C#using

2009-08-26 14:48:21

C#打印分頁

2011-04-25 14:42:10

C#lock

2009-08-25 01:46:00

C# WINDOWS服

2009-08-26 15:53:42

C#數(shù)據(jù)訪問XML

2009-08-27 15:22:27

C#中的GET與SET

2024-03-19 14:18:48

C#后端編程

2009-08-31 14:19:20

C#打開一個(gè)文件

2009-08-25 15:23:16

C#子線程

2009-09-01 16:03:32

C#單元測(cè)試

2009-08-31 13:53:03

C#創(chuàng)建一個(gè)文件

2009-08-19 14:15:42

C# 復(fù)合控件

2023-11-30 12:03:06

linuxAwk

2023-10-26 11:22:32

2013-06-05 10:11:20

索引器C#

2013-02-25 10:18:08

ThreadMsgC#

2009-09-01 16:14:06

C#窗口抖動(dòng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 秋霞精品 | 欧美日韩一二三区 | 亚洲人成人一区二区在线观看 | 一区二区激情 | 亚洲精品4| 久久高清| 国产欧美日韩在线 | 麻豆精品一区二区三区在线观看 | 黄免费在线 | 超级黄色一级片 | 亚洲国产成人精品女人久久久 | 日韩精品一区二区三区中文在线 | 国产精品久久久久久久久久免费看 | 日本黄色短片 | 国产精品久久av | 国内精品一区二区 | 国产成人久久精品一区二区三区 | 国产精品久久久久久久久久久久午夜片 | 久久精品小视频 | 国产欧美精品一区二区色综合朱莉 | 观看av| 中文字幕亚洲精品 | 亚洲天堂影院 | 亚洲第一av | 亚洲一区欧美一区 | 一区二区三区在线免费 | av片免费 | 亚洲一区二区成人 | 九色网址 | 日韩欧美高清 | 亚洲啊v在线 | 成人精品毛片国产亚洲av十九禁 | 国产一区二区精品自拍 | 国产精品免费视频一区 | 欧美激情国产精品 | av网站免费 | 国产亚洲高清视频 | 亚洲精品乱码久久久久v最新版 | 免费一区 | 中日av | av日韩在线播放 |