freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

windows編程基本手冊(cè)(編輯修改稿)

2025-07-26 09:03 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 初始化子線程所需的數(shù)據(jù)是造成“競(jìng)態(tài)條件”的常見原因.10. 確認(rèn)每個(gè)不同的子線程都從線程參數(shù)中傳遞,不要假設(shè)子線程會(huì)在另一個(gè)線程之前完成11. 任何線程在任何時(shí)間都可能被搶占或恢復(fù)12. 不使用線程優(yōu)先級(jí)來代替顯式的同步13. 確保線程有足夠大的堆棧,默認(rèn)的1MB通常已經(jīng)足夠14. 除了顯然是并發(fā)的才使用多線程以外,其他的只會(huì)增加復(fù)雜性和性能開銷15. 使用大量的線程大量的堆棧會(huì)將消耗虛擬內(nèi)存空間16. Sleep(0)會(huì)導(dǎo)致線程放棄時(shí)間片的剩余時(shí)間,內(nèi)核將線程從運(yùn)行中狀態(tài)轉(zhuǎn)移到準(zhǔn)備好狀態(tài).有在線程準(zhǔn)備好運(yùn)行的情況下,SwitchToThread函數(shù)提供另外一種線程把處理器交給另一個(gè)準(zhǔn)備好的線程的方法.,使用_endthreadex替代ExitThread來終止線程,.17. 一個(gè)纖程是應(yīng)用程序可調(diào)度的執(zhí)行單元,而不是由內(nèi)核來調(diào)度的單元,應(yīng)用程序可創(chuàng)建大量纖程,纖程本身決定下一個(gè)要執(zhí)行的是哪個(gè)纖程,纖程有獨(dú)立的堆棧,但是完全運(yùn)行于調(diào)度它們的線程的上下文中,纖程的管理完全發(fā)生在內(nèi)核外面的用戶空間中,可以認(rèn)為纖程是輕量級(jí)的線程,但一次不能運(yùn)行于兩個(gè)線程上,所以纖程不應(yīng)該訪問線程特定的數(shù)據(jù)如TLS..纖程不是搶占式調(diào)度的,Windows執(zhí)行機(jī)構(gòu)并不知道纖程的存在,纖程是在纖程DLL中管理的,以如下順序使用:1線程通過調(diào)用ConvertThreadToFiber或ConvertThreadToFiberEx來啟用纖程操作,而后線程就由一個(gè)單一的纖程組成,這一調(diào)用提供指向纖程數(shù)據(jù)的指針,這個(gè)指針可以像用于創(chuàng)建線程獨(dú)特?cái)?shù)據(jù)的線程參數(shù)的用法那樣使用.2應(yīng)用程序可使用CreateFiber來創(chuàng)建更多纖程,每個(gè)纖程有起始地址,堆棧尺寸以及一個(gè)參數(shù),每個(gè)新纖程通過地址來標(biāo)識(shí),而不是句柄.3各個(gè)纖程可通過調(diào)用GetFiberData獲取從CreateFiber所接收而來的自已的數(shù)據(jù)4纖程可使用GetCurrentFiber獲得自已的標(biāo)識(shí)5運(yùn)行中的纖程通過調(diào)用SwitchToFiber將控制讓給其他纖程,這個(gè)函數(shù)需要給出其他纖程的地址,纖程必須顯式表明在線程中要運(yùn)行的下一個(gè)纖程6DeleteFiber函數(shù)刪除現(xiàn)有的纖程及其所有關(guān)聯(lián)的數(shù)據(jù)7在XP中增加了新的函數(shù),如ConvertFiberToThread(它釋放由ConvertThreadToFiber所創(chuàng)建的資源),以及纖程本地存儲(chǔ).8,這個(gè)纖程總是將控制交給主纖程,點(diǎn)對(duì)點(diǎn)調(diào)度,一個(gè)纖程決定下一個(gè)要運(yùn)行的纖程,Volatile存儲(chǔ)可確保變量在被修改之后儲(chǔ)存在內(nèi)存中,而且在使用該變量之前永遠(yuǎn)從內(nèi)存中取它來,volatile限定符通知編譯器:這個(gè)變量可能在任何時(shí)間更改值,但是會(huì)影響性能,只有在需要的時(shí)候才使用它.使用volatile的指導(dǎo)原則,1. 必須是任何由并發(fā)線程訪問的變量,而且至少被一個(gè)線程修改.2. 即使是只讀訪問,該變量也至少被兩個(gè)線程訪問,并且正確的程序操作要依賴于新值能夠立即對(duì)所有線程可見.3. 互鎖函數(shù)(interlocked function的參數(shù)需要volatile變量但是使用volatile修飾符也不能確定其他處理器以特定順序看到修改,一個(gè)處理器可能先將值保存在緩存中,而后才提交給內(nèi)存4. 使用InterlockedIncrement(amp。N)進(jìn)行遞增操作,但不可連續(xù)兩次調(diào)用這個(gè)函數(shù). 線程安全的代碼.,而且有個(gè)線程特定的狀態(tài)值,比如計(jì)數(shù)器,必須在函數(shù)調(diào)用之前保持持久,那么將它存儲(chǔ)在全局變量中,要將狀態(tài)值儲(chǔ)存在線程專用的數(shù)據(jù)結(jié)構(gòu)中.,如果在程序的某個(gè)點(diǎn)需要保持某些狀態(tài),那么可通過等待同步對(duì)象來確保狀態(tài)的確得到保持,那樣會(huì)影響所有的線程,一個(gè)線程不應(yīng)該設(shè)置標(biāo)準(zhǔn)輸入或輸出句柄,或者改變環(huán)境變量,所有線程將共享相同的環(huán)境,并且受到能創(chuàng)建內(nèi)存屏障的同步或互鎖機(jī)制的保護(hù)..1)一個(gè)線程可通過使用WaitForSingleObject或WaitForMultipleObjects等候線程句柄的方法等待另一個(gè)進(jìn)程或線程的終止.2)文件鎖專門用于同步的文件訪問3)CRITICAL_SECTION臨界區(qū)對(duì)象是首選機(jī)制,永遠(yuǎn)要確認(rèn)離開一個(gè)CS,如果沒能這么做將導(dǎo)致其他線程永遠(yuǎn)等待,即使擁有該CS的線程終止,臨界區(qū)擁有一個(gè)計(jì)數(shù)器,確保遞歸函數(shù)有用。可以使用TryEnterCriticalSection,返回TRUE表示成功擁有該CS,返回FALSE,.4)使用互鎖指令訪問和修改的任何變量都是volatile的,除了進(jìn)入和離開時(shí)會(huì)創(chuàng)建內(nèi)存屏障的不需要,但是臨界區(qū)無法傳信給其他線程,沒有超時(shí)能力.,會(huì)是已傳信的,其他線程不會(huì)永遠(yuǎn)被阻塞.,而CS只能輪詢,1如果WaitForSingleObject等待互斥量句柄不帶超時(shí),那么調(diào)用的線程可能永遠(yuǎn)阻塞2如果線程終止或在離開CS之前終止,那么CS會(huì)處于不穩(wěn)定的狀態(tài),之后的行為是不確定的3互斥量粒度影響性能,大的臨界區(qū)的代碼區(qū)域如果長(zhǎng)時(shí)間鎖住,并發(fā)性得不到保證.4鎖的使用要最小化5盡量以文字或表達(dá)式的形式將不變式記錄到文檔 信號(hào)量,可用來控制確切數(shù)量的線程醒來,但是如果請(qǐng)求計(jì)數(shù)遞減2存在著阻塞狀態(tài) 事件當(dāng)一個(gè)事件被傳信之后,多個(gè)線程可從等待狀態(tài)同時(shí)釋放,事件可分為手動(dòng)復(fù)位和自動(dòng)復(fù)位兩種。(自動(dòng)復(fù)位)或所有(手工復(fù)位)等待中的線程通過這扇門之后立即關(guān)閉,性能以及NT6增強(qiáng) 高度的鎖競(jìng)爭(zhēng)會(huì)阻礙良好的性能,而且降低是劇烈的,不會(huì)和線程數(shù)量呈線性關(guān)系,這個(gè)變量就是volatile的,以便確保每個(gè)線程都能在內(nèi)存中對(duì)該變量做讀寫操作,而不是假定該變量保持在對(duì)線程特定的寄存器中,但是,不可過度使有volatile,任何函數(shù)調(diào)用或返回都將確保寄存器的存儲(chǔ),此外,每個(gè)同步調(diào)用都會(huì)建立起內(nèi)存屏障.,確認(rèn)等待條件變量之前不變式成立.3. 互鎖函數(shù)如何運(yùn)行取決于函數(shù)運(yùn)行的處理器平臺(tái),對(duì)于x86系列的處理器 ,互鎖函數(shù)會(huì)向總線發(fā)出一個(gè)硬件信號(hào),防止其他處理器訪問同一個(gè)內(nèi)存地址.高速緩存行有32或64個(gè)字節(jié)組成,并且始終在第32個(gè)字節(jié)或第64個(gè)字節(jié)的邊界上對(duì)齊,高速緩存行的作用是為了提高CPU運(yùn)行的性能。1WaitForMultipleObjects函數(shù)是以原子形式運(yùn)行的,它在檢查內(nèi)核對(duì)象狀態(tài)時(shí),其他任何線程都無法改變對(duì)象的狀態(tài),即等待時(shí)間最長(zhǎng)的進(jìn)程得到這個(gè)對(duì)象,但是系統(tǒng)中的一些操作有可能改變這個(gè)特征,如果正在等待對(duì)象的線程暫停運(yùn)行,那么因?yàn)闊o法對(duì)暫停的線程進(jìn)行調(diào)度,所以系統(tǒng)會(huì)忘記這個(gè)線程正在等待對(duì)象,而當(dāng)線程再次恢復(fù)運(yùn)行時(shí),系統(tǒng)則認(rèn)為這個(gè)線程剛剛開始等待這個(gè)對(duì)象,因此改變了線程的等待時(shí)間特征,,達(dá)到一個(gè)斷點(diǎn)時(shí),這個(gè)進(jìn)程中的所有線程都會(huì)暫停運(yùn)行,因此,調(diào)試一個(gè)進(jìn)程會(huì)使得先進(jìn)先出算法的結(jié)果難于預(yù)測(cè).2PulseEvent會(huì)使事件變?yōu)橐淹ㄖ獱顟B(tài),然后立即變?yōu)槲赐ㄖ獱顟B(tài),如果在人工重置事件上調(diào)用,等待這個(gè)事件的所有線程都可以變?yōu)榭烧{(diào)度線程,如果在自動(dòng)重置事件上調(diào)用,并且無法知道哪個(gè)線程將會(huì)看到事件發(fā)生,并變成可調(diào)度線程,所以pulseEvent并不十分有用.3WM_TIMER消息屬于最低優(yōu)先級(jí)消息,只有進(jìn)程對(duì)列中沒有其他消息,才對(duì)這條消息進(jìn)行檢索,定時(shí)器發(fā)出的報(bào)時(shí)信息將會(huì)喚醒正在等待之中的線程.4SignalObjectAndWait的優(yōu)點(diǎn)有兩個(gè):通知一個(gè)對(duì)象等待另一個(gè)對(duì)象,可以節(jié)省很多處理時(shí)間,每次調(diào)用一個(gè)函數(shù),使線程從用戶模式代碼變成內(nèi)核模式代碼,大約需要1000個(gè)CPU處理周期(x86平臺(tái)上),不使用該函數(shù),一個(gè)線程無法知道另一個(gè)線程何時(shí)處于等待狀態(tài),1. 命名管道是面對(duì)消息的,讀進(jìn)程可以精確地讀入由寫進(jìn)程發(fā)送的不同長(zhǎng)度的消息.2. 命名管道是雙向的,面對(duì)消息的.3. 可以有多個(gè)獨(dú)立的但具有相同名稱的管道實(shí)例4. 5. 命名管道要比匿名管道更可取,匿名管道可以進(jìn)行單向的(半雙工)基于字節(jié)的IPC,也會(huì)阻塞.6. 管道名稱是大小寫不敏感的,而且可以包含任何除反斜杠之外的字符,使用PeekNamePipe來確定是否有實(shí)際需要讀取的消息,在不破壞原有消息的基礎(chǔ)上讀入管道中消息的任意字節(jié),但它不會(huì)阻塞,立即返回.7. 郵槽是一個(gè)廣播機(jī)制,它與數(shù)據(jù)報(bào)類似1郵槽是單向的2郵槽是一對(duì)多的關(guān)系3寫者不知道是否對(duì)方實(shí)際接收到了消息4消息長(zhǎng)度有限需要的操作1服務(wù)器使用CreateMailslot2使用ReadFile調(diào)
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1