
課程咨詢: 400-996-5531 / 投訴建議: 400-111-8989
認(rèn)真做教育 專心促就業(yè)
微軟發(fā)布了。NET 4.0 Beta 1的一個(gè)單獨(dú)的新版本,其中包含了STM.NET,也就是Software Transactional Memory.通常我們使用基于鎖的同步機(jī)制來控制對(duì)共享內(nèi)存的訪問,STM則是鎖之外的另一種選擇。
微軟將STM.NET定義為:
Software Transactional Memory(STM.NET)是一種可以高效隔離共享狀態(tài)的機(jī)制。開發(fā)人員可以將一段代碼標(biāo)記為"原子"事務(wù),并與其它并行運(yùn)行的事務(wù)代碼"隔離"開來。
內(nèi)存事務(wù)(Transactional memory)在學(xué)術(shù)界被認(rèn)為是一項(xiàng)有前途的技術(shù),并且在當(dāng)前利用多核硬件提高程序擴(kuò)展性的大潮中,也做為一項(xiàng)受歡迎的技術(shù)被反復(fù)提及,其目的是使應(yīng)用程 序開發(fā)人員可以利用STM的并發(fā)功能,將那些由專家開發(fā)的組件組合在一起,內(nèi)存事務(wù)使這變得簡單而安全。
STM使用樂觀并發(fā)機(jī)制來控制對(duì)共享內(nèi)存的訪問,在線程可以安全的修改共享數(shù)據(jù)前,不會(huì)一直阻塞線程,而是在線程訪問共享數(shù)據(jù)時(shí),將讀寫操作記錄在日志 中。然后,它會(huì)檢查是否有另一個(gè)線程正好在同一時(shí)刻訪問共享數(shù)據(jù)。如果沒有,這些改變將會(huì)被提交并永久生效;否則,事務(wù)將會(huì)被取消,所有的修改都將撤銷。
STM.NET使用Atomic.Do()將一段代碼標(biāo)記為一個(gè)事務(wù):
Atomic.Do(()=> {
});
STM與鎖機(jī)制一樣會(huì)導(dǎo)致系統(tǒng)性能降低,這是因?yàn)樗枰S護(hù)讀寫日志,而且提交時(shí)會(huì)花費(fèi)額外的時(shí)間。一些人認(rèn)為STM比鎖更容易使用,因此在易用性上的優(yōu)勢(shì)足以抵消性能上的降低。在一項(xiàng)名為《事務(wù)編程真的容易么?》的研究中,來自奧斯丁德克薩斯大學(xué)的Christopher J. Rossbach、Owen S. Hofmann和 Emmett Witchel比較了STM與鎖的學(xué)習(xí)和開發(fā)過程:
一般來說,內(nèi)存事務(wù)比簡單的鎖需要更多的開發(fā)時(shí)間,但少于細(xì)致的鎖和條件同步。
我們發(fā)現(xiàn)在更復(fù)雜的情況下,簡單的鎖和事務(wù)所用的時(shí)間要少于細(xì)致的鎖。這體現(xiàn)了事務(wù)的初衷,在需要多個(gè)鎖的情況下,減少編碼、調(diào)試和鎖順序的復(fù)雜性。
這項(xiàng)研究總結(jié)道:
這證明了即使新手在理解事務(wù)方面可能存在困難,但事務(wù)編程比高性能的鎖更安全。對(duì)學(xué)生的主觀評(píng)測(cè)顯示,他們認(rèn)為事務(wù)內(nèi)存比簡單的鎖要難一些,但是比細(xì)致的 鎖和條件同步簡單。然而在學(xué)生寫的代碼中,同步錯(cuò)誤的比率呈現(xiàn)出戲劇化的結(jié)果。對(duì)于相似的編程問題,使用事務(wù)比使用鎖更容易得到正確的結(jié)果。
系統(tǒng)配置需求:Visual Studio 2008,Windows Installer 3.1以上, Internet Explorer 5.01以上。目前STM.NET只支持C#.
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!