青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

洗塵齋

三懸明鏡垂鴻韻,九撩清泉洗塵心

常用鏈接

統計

最新評論

volatile關鍵字

volatile關鍵字

volatile是c/c++中一個鮮為人知的關鍵字,該關鍵字告訴編譯器不要持有變量的臨時拷貝,它可以適用于基礎類型
如:int,char,long......也適用于C的結構和C++的類。當對結構或者類對象使用volatile修飾的時候,結構或者
類的所有成員都會被視為volatile.

使用volatile并不會否定對CRITICAL_SECTION,Mutex,Event等同步對象的需要
例如:
int i;
i = i + 3;
無論如何,總是會有一小段時間,i會被放在一個寄存器中,因為算術運算只能在寄存器中進行。一般來說,volatitle
關鍵字適用于行與行之間,而不是放在行內。

我們先來實現一個簡單的函數,來觀察一下由編譯器產生出來的匯編代碼中的不足之處,并觀察volatile關鍵字如何修正
這個不足之處。在這個函數體內存在一個busy loop(所謂busy loop也叫做busy waits,是一種高度浪費CPU時間的循環方法)

void getKey(char* pch)
{
?while (*pch == 0)
??;
}

當你在VC開發環境中將最優化選項都關閉之后,編譯這個程序,將獲得以下結果(匯編代碼)
;?????? while (*pch == 0)
$L27
?; Load the address stored in pch
?mov eax, DWORD PTR _pch$[ebp]
?; Load the character into the EAX register
?movsx eax, BYTE PTR [eax]
?; Compare the value to zero
?test eax, eax
?; If not zero, exit loop
?jne $L28
?;
?jmp $L27
$L28
;}

這段沒有優化的代碼不斷的載入適當的地址,載入地址中的內容,測試結果。效率相當的低,但是結果非常準確

現在我們再來看看將編譯器的所有最優化選項開關都打開以后,重新編譯程序,生成的匯編代碼,和上面的代碼
比較一下有什么不同
;{
?; Load the address stored in pch
?mov eax, DWORD PTR _pch$[esp-4]
?; Load the character into the AL register
?movsx al, BYTE PTR [eax]
;?while (*pch == 0)
?; Compare the value in the AL register to zero
?test al, al
?; If still zero, try again
?je SHORT $L84
?;
;}

從代碼的長度就可以看出來,比沒有優化的情況要短的多。需要注意的是編譯器把MOV指令放到了循環之外。這在
單線程中是一個非常好的優化,但是,在多線程應用程序中,如果另一個線程改變了變量的值,則循環永遠不會
結束。被測試的值永遠被放在寄存器中,所以該段代碼在多線程的情況下,存在一個巨大的BUG。解決方法是重新
寫一次getKey函數,并把參數pch聲明為volatile,代碼如下:

void getKey(volatile char* pch)
{
?while (*pch == 0)
??;
}

這次的修改對于非最優化的版本沒有任何影響,下面請看最優化后的結果:

;{
?; Load the address stored in pch
?mov eax, DWORD PTR _pch$[esp-4]
;?????? while (*pch == 0)
$L84:
?; Directly compare the value to zero
?cmp BYTE PTR [eax], 0
?; If still zero, try again
?je SHORT $L84
?;
;}

這次的修改結果比較完美,地址不會改變,所以地址聲明被移動到循環之外。地址內容是volatile,所以每次循環
之中它不斷的被重新檢查。

把一個const volatile變量作為參數傳遞給函數是合法的。如此的聲明意味著函數不能改變變量的值,但是變量的
值卻可以被另一個線程在任何時間改變掉。

另:

如果在一個多線程程序中想在兩個函數中共享一個局部變量,需把變量聲明為volatile類型

例如:

void?f1(void?*?x)
{????
????
while(*(int?*)x==0);
????cout
<<"helo";
????_endthread();
}

void?f2(void?*i)
{
????
for(int?j=0;j<111;j++);
????(
*((int?*)i))++;
????_endthread();
}

int?main()
{
??? int?i=0;
????_beginthread((
void(*)(void?*))f1,0,&i);????
????_beginthread((
void(*)(void?*))f2,0,&i);
????
while(getch()!='q');
????
return?0;
}

上例中,函數f1()中的循環控制條件永遠為真,字符串"helo"得不到打印。

如果把f1()的參數類型改為volatitle void *x,則打印命令被實現。

posted on 2006-04-19 22:05 芥之舟 閱讀(849) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一级在线视频| 欧美一区二区三区四区在线观看| 一色屋精品视频在线看| 亚洲免费视频一区二区| 欧美大香线蕉线伊人久久国产精品| 日韩一级精品| 狠狠色狠狠色综合日日五| 国产精品每日更新| 国产精品国产三级国产aⅴ入口| 欧美好骚综合网| 欧美黄色免费| 欧美激情一区二区在线| 麻豆av一区二区三区| 久久裸体视频| 久久男女视频| 久久精品亚洲精品| 久久久五月天| 蜜桃av一区二区三区| 久久久亚洲成人| 卡一卡二国产精品| 亚洲免费小视频| 亚洲欧美日韩成人高清在线一区| 一区二区三区三区在线| 亚洲一区二区三区影院| 香蕉久久精品日日躁夜夜躁| 午夜在线观看免费一区| 午夜久久黄色| 免费一级欧美在线大片| 亚洲国产欧美一区| 欧美 日韩 国产精品免费观看| 欧美成人免费一级人片100| 亚洲电影免费观看高清| 亚洲国产日日夜夜| 在线一区日本视频| 午夜精品福利一区二区蜜股av| 久久久久国产精品一区二区| 欧美大片在线看| 亚洲美女在线看| 亚洲综合激情| 久久伊人亚洲| 午夜精品福利在线观看| 欧美一区二区三区免费视频| 久久久久久国产精品mv| 欧美激情精品久久久久久大尺度| 亚洲区免费影片| 午夜精品一区二区三区四区| 可以看av的网站久久看| 国产精品户外野外| 亚洲国产精品黑人久久久| 一区二区三区四区五区精品视频 | 韩国av一区| 香蕉成人久久| 亚洲女性喷水在线观看一区| 国产精品www网站| 亚洲一区二区不卡免费| 亚洲在线一区| 亚洲精品一区二区三区樱花| 久久精品中文字幕免费mv| 一本色道久久综合亚洲精品不卡| 欧美成人午夜激情视频| 亚洲成色精品| 欧美激情一级片一区二区| 麻豆精品视频在线观看视频| 黄色亚洲网站| 欧美韩日一区二区三区| 欧美成人一区二免费视频软件| 亚洲第一区色| 欧美激情一区二区三区四区| 欧美96在线丨欧| 亚洲伦理在线免费看| 最新国产拍偷乱拍精品| 欧美日本成人| 亚洲在线第一页| 亚洲欧美日韩精品久久久久| 国产麻豆日韩欧美久久| 久久蜜桃精品| 欧美不卡激情三级在线观看| 在线亚洲欧美| 国产精品永久入口久久久| 亚欧成人精品| 欧美影院精品一区| 亚洲三级免费电影| 亚洲深夜福利网站| 加勒比av一区二区| 日韩亚洲不卡在线| 国产美女精品视频| 毛片一区二区三区| 男女av一区三区二区色多| 国产精品99久久久久久久久| 亚洲无线视频| 国产欧美在线播放| 欧美激情欧美激情在线五月| 欧美福利一区二区| 亚洲欧美国产视频| 久久久天天操| 在线视频你懂得一区二区三区| 亚洲视频图片小说| 国内精品久久久久久影视8| 欧美99久久| 国产精品一区二区女厕厕| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲毛片一区二区| 国产在线视频欧美| 夜夜嗨av一区二区三区网站四季av| 国产视频在线观看一区二区三区| 欧美成人日韩| 国产一区视频观看| 一区二区三区日韩精品| 亚洲国产高清自拍| 欧美一区二区黄色| 亚洲欧美日韩在线不卡| 欧美精品免费看| 欧美风情在线| 国产亚洲成av人片在线观看桃 | 欧美一级视频精品观看| 欧美国产三级| 国产精品theporn88| 久久精品国产免费看久久精品| 久久精品论坛| 欧美在线地址| 国产精品欧美日韩| 亚洲日本乱码在线观看| 精品电影一区| 欧美在线free| 久久国产福利| 国产喷白浆一区二区三区| 中文av一区特黄| 亚洲一级高清| 国产精品久久久久婷婷| 一区二区三区高清不卡| 亚洲午夜精品一区二区三区他趣| 欧美激情一区二区久久久| 欧美大色视频| 伊人色综合久久天天| 久久蜜桃资源一区二区老牛 | 亚洲国产精品嫩草影院| 亚洲国产日韩一区| 久久在线免费| 亚洲高清在线观看| 亚洲美女视频网| 欧美日韩亚洲综合在线| 99一区二区| 新狼窝色av性久久久久久| 国产精品乱码人人做人人爱| 亚洲尤物影院| 久久在线精品| 亚洲精品免费观看| 欧美另类女人| 亚洲午夜在线观看视频在线| 亚洲性人人天天夜夜摸| 国产精品久久99| 欧美亚洲在线| 欧美黄在线观看| 夜夜狂射影院欧美极品| 国产精品美女999| 久久国产精品99久久久久久老狼| 免费在线欧美黄色| 日韩亚洲欧美在线观看| 国产精品国产亚洲精品看不卡15| 亚洲欧美韩国| 欧美激情一区二区三级高清视频| 一本在线高清不卡dvd | 亚洲欧美日韩在线综合| 国产精品乱码一区二三区小蝌蚪| 欧美有码在线观看视频| 免费看黄裸体一级大秀欧美| 夜色激情一区二区| 国产人妖伪娘一区91| 久久手机免费观看| 一区二区三区久久久| 久久久综合网站| 亚洲午夜av电影| 亚洲国产精品va在线看黑人动漫| 欧美乱妇高清无乱码| 欧美一区二区视频97| 91久久午夜| 乱码第一页成人| 性欧美videos另类喷潮| 亚洲精品视频在线观看网站| 国产亚洲精品福利| 欧美色中文字幕| 欧美91大片| 久久国产精品毛片| 正在播放欧美视频| 亚洲国产日韩欧美综合久久| 欧美在线一级视频| 亚洲免费观看高清完整版在线观看熊 | 亚洲一级片在线观看| 欧美激情精品久久久久久久变态 | 一本色道久久99精品综合| 蜜桃av一区二区三区| 新片速递亚洲合集欧美合集| 99精品久久免费看蜜臀剧情介绍| 国内自拍亚洲| 国产欧美日韩亚州综合| 国产精品成人在线观看| 欧美日韩成人一区| 欧美福利在线| 美女脱光内衣内裤视频久久影院| 香蕉久久久久久久av网站|