写了一阵子多线程之后需要注意的几点
在要給線程設置親和性時,在創建線程之后要將線程掛起,否則線程會立即運行。
多線程環境中對一個變量進行讀寫時,需要有一種方法能夠保證對一個值的遞增操作是原子操作——即不可打斷性,一個線程在執行原子操作時,其它線程必須等待它完成之后才能開始執行該原子操作。
在windows API中,WaitForMultipleObjects()最多只能等待64個線程。
關于內核對象:
每個內核對象只是內核分配的一塊內存,并且只能由該內核訪問。該內存塊是一種數據結構,它的成員負責維護該對象的各種信息。有些數據成員(如安全描述符、使用計數等)在所有對象類型中是相同的,但絕大多數數據成員屬于特定的對象類型。
內核對象的存在時間可以比創建該對象的進程長。
內核對象能夠得到安全性描述符的保護。安全描述符用于描述誰創建了該對象,誰能夠訪問或使用該對象,誰無權訪問該對象。安全描述符通常在編寫服務器應用程序時使用,如果你編寫客戶機的應用程序,那么可以忽略內核對象的這個特性。
每個線程必須用歐一個進入點函數,線程從這個進入點開始運行。主線程的進入點函數:即main、wmain、WinMain或wWinMain。
如果線程能夠返回,就可以確保以下事項的實現:在線程函數中創建的所有C++對象均將通過它們的撤銷函數正確地撤銷。操作系統將正確地釋放線程堆棧使用的內存。系統將線程的退出代碼設置為線程函數的返回值。系統將遞減線程內核對象的使用計數。
關鍵段(Critical Section)是一小段代碼,它執行之前需要獨占對一些共享資源的訪問權。這種訪問方式可以讓多行代碼以“原子方式”對資源進行操控。這里的原子方式,指的是代碼知道除了當前線程之外,沒有其他任何線程會同時訪問該資源。當然,系統仍然可以暫停當前線程去調度其他線程。但是,當前線程離開關鍵段之前,系統時不會去調度任何想要訪問同一資源的其它線程的。
設置進程的優先級再設置線程的優先級。通過將線程的相對優先級與線程的進程優先級綜合起來考慮,系統就可以確定線程的優先等級。
轉載于:https://www.cnblogs.com/tcsong24/p/7878194.html
總結
以上是生活随笔為你收集整理的写了一阵子多线程之后需要注意的几点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Javascript】复选框的全选与全
- 下一篇: Kotlin实现LeetCode算法题之