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

正文內(nèi)容

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

2025-07-26 09:03 本頁面
 

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