日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

用户方式中线程的同步——Windows核心编程学习手札之八

發布時間:2025/4/16 windows 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户方式中线程的同步——Windows核心编程学习手札之八 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用戶方式中線程的同步

——Windows核心編程學習手札之八

系統中所有線程都必須擁有對各種系統資源的訪問權,這些資源包括內存堆棧、串口、文件、窗口和許多其他資源。如果一個線程需要獨占對資源的訪問權,那么其他線程就無法完成它們的工作;另一方面,也不能讓任何一個線程在任何時間都能訪問所有的資源。線程在兩種情況下需要互相進行通信:1)當有多個線程訪問共享資源而不使資源被破壞時;2)當一個線程需要將某個任務已經完成的情況通知另外一個或多個線程時。

線程同步問題在很大程度上與原子訪問有關。原子訪問是指線程在訪問資源時能夠確保所有其他線程都不在同一個時間內訪問相同的資源。線程同步的原子訪問可通過互鎖的函數家族來解決,互鎖函數的運行取決于運行在何種CPU平臺。對于X86家族的CPU來說,互鎖函數會對總線發出一個硬件信號,防止另一個CPU訪問同一個內存地址;在Alpha平臺上,互鎖函數要執行下列操作:1)打開CPU中的一個特殊位標志,并注明被訪問的內存地址;2)將內存的值讀入一個寄存器;3)修改該寄存器;4)如果CPU中的特殊位標志是關閉的,則轉入2)步,否則,特殊位標志仍然是打開的,寄存器的值重寫入內存。如果系統中的另一個CPU試圖修改同一個內存地址,4)步就能夠關閉CPU的特殊位標志,從而導致互鎖函數返回2)步。無論編譯器怎樣生成代碼,無論計算機安裝多少個CPU,它們都能保證以原子操作方式來修改一個值,還必須保證傳遞給這些函數的變量地址正確地對齊,否則這些函數就會運行失敗。調用互鎖函數的速度極快(通常會導致執行幾個CPU周期,小于50),并且不會從用戶方式轉換為內核方式(通常需要執行1000CPU周期)。避免 在單個CPU計算機上使用循環鎖,如果一個線程正在循環運行,它將會浪費前一個CPU時間,這將防止另一個線程修改該值。循環鎖假定,受保護的資源總是被訪問較短的時間。這使它能夠更加有效地循環運行,然后轉為內核方式并進入等待狀態。在編程時,如循環運行一定次數(如400次)以上,對資源的訪問仍被拒絕,那么該線程就轉為內核方式,這種方式下,它要等待(不消耗CPU時間),直到該資源變為可供使用為止。

創建一個能夠在多處理器計算機上運行的高性能應用程序,需要了解CPU高速緩存行。 當一個CPU從內存讀取一個字節時,它不只是取出一個字節,而是要取出足夠的字節來填入高速緩存行。高速緩存行由3264個字節組成(視CPU而定),并且始終在第32個字節或第64個字節的邊界上對齊,高速緩存行的作用是為了提高CPU運行的性能,通常情況下,應用程序只能對一組相鄰的字節進行處理,如果這些字節在高速緩存中,那么CPU就不必訪問內存總線,而訪問內存總線需要花費多的時間。但是,在多處理器環境中,高速緩存行使得內存的更新更加困難。

關鍵代碼段是一個小代碼段,在代碼能夠執行前,必須獨占對某些共享資源的訪問權。這是讓若干行代碼能夠“以原子操作方式”來使用資源的一種方法。所謂原子操作方式,是指該代碼知道沒有別的線程要訪問該資源。當然,系統能夠抑制線程的運行,而搶先安排其他線程的運行。在線程退出關鍵代碼之前,系統將不給想要訪問相同資源的其他任何線程進行調度。當線程試圖進入另一個線程擁有的關鍵代碼段時,調用線程就立即被置于等待狀態。這意味著該線程必須從用戶方式轉入內核方式(大約1000CPU周期)。這種轉換是要付出很大代碼的。在多處理器上,當前擁有資源的線程可以在不同處理器上運行,并且能夠很快放棄對資源的控制。實際上擁有資源的線程可以在另一個線程完成轉入內核方式之前釋放資源。為提高代碼段的運行性能,Microsoft將循環鎖納入了這些代碼段,因此,當EnterCriticalSection函數被調用時,它就使用循環鎖進行循環,以便設法多次取得該資源,只有當為了取得該資源的每次試圖都失敗后,該線程才轉入內核方式,以便進入等待狀態。使用關鍵的代碼段有幾個技巧值得學習:1)每個共享資源使用一個CRITICAL_SECTION變量;2)同時訪問多個資源,應按照完全相同的順序請求對資源的訪問;3)不可長時間運行關鍵代碼段。

???????????????????????????????? 如非

????????????????????????????????? 2009-1-4

總結

以上是生活随笔為你收集整理的用户方式中线程的同步——Windows核心编程学习手札之八的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。