Windows线程
(總結自windows核心編程,加了一些網上的資料及自己的評論)
線程創建
API:CreateThread()創建本地線程。CreateRemoteThread()創建遠程線程,這個用到的很少,他會將線程創建在目標進程的地址空間里,前提得有權限,如果遠程進程不是你的進程,那程序運行肯定不會穩定。
CRT庫:_beginthreadex()參數意義同第一個API,這個函數是對api的一個封裝,主要是為了標準庫的需要,會分配線程本地內存等一系列操作(保證標準庫函數線程安全);_beginthread()功能很少,也是過時的函數,其實這個函數應該忽略。
Phtread:Mingw里有一個Pthread的是win32實現,用的也是一個開源的庫,貌似是叫win32-pthread,鏈接http://sourceware.org/pthreads-win32/。沒研究過。創建線程pthread_create(),這個就有點遠了。pthread是posix的標準,在類unix上實現,此處略過。
同步和通信:
volatile:C的變量修飾符,變量有可能被其他代碼修改,阻止編譯器優化,每次cpu取數據時應直接去內存中取,忽略寄存器中的值。
interlocked系列函數:此系列函數功能相對簡單,但都是原子操作,包括add和exchange等,也有increment和decrement,其中exchange函數在32和64位系統上表現的行為是不一樣的,參看MSDN。
關鍵段:這個機制在內部使用的是interlocked,是用戶級別的操作,不是內核對象,也不用切換內核模式(當然是線程可立即“獲得鎖”的情況下,如果線程阻塞,那必定要陷入內核模式的,一種解決方法是旋轉鎖,不過旋轉鎖最好不用于單CPU系統中,而且如果線程等待的時間會很長那就不要用旋轉鎖!),因此其速度很快,功能類似于互斥量,有一個很好的功能函數是TryEnterCriticalSection(),會試著“獲得鎖”,如果失敗返回0,成功返回true,這個功能也是很有用的。
slim read/write lock:
SRWlock系列函數,也是用戶級別的操作,運行可以很快,但是他可以將讀寫分開,可以有多個線程同時獲得讀權限,因此,在性能上會略好于關鍵段,但是不存在try函數,對于SRWlock只需要初始化而不需要釋放,系統會管理SRWLock的釋放。有一條很重要,這個是只能用在visita+上的東西xp上是不提供此機制的(可憐我的xp)!!!!
條件變量:
使用在關鍵段和SRWLock上的條件,依然是visita+。MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682052(v=vs.85).aspx
剩下的還有wait類函數和一些內核對象包括事件、互斥量、信號量、可等待的計時器等。。。。
(哎,寫不下去了,終于明白微博為什么會火,也實在是不擅長寫東西,虎頭蛇尾。。。。還是給我msdn中process和thread的鏈接吧,涉及很多東西(PS:神馬線程池,TLS,job,Fiber之類),最官方的資料了:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx)
?
轉載于:https://www.cnblogs.com/bslash/archive/2013/05/03/3056388.html
總結
- 上一篇: Man
- 下一篇: 抗日战争爆发后造纸专家谁四处奔走号召抗日