如果邏輯控制流在時間上重疊粥帚,那么它們就是并發(fā)的翔悠。
現(xiàn)代操作系統(tǒng)提供了三種基本的構(gòu)造并發(fā)程序的方法:
- 進程,每個邏輯控制流都是一個進程元莫,由內(nèi)核調(diào)度和維護赖阻,進程有獨立的虛擬地址空間蝶押,要想共享數(shù)據(jù),必須顯示的IPC機制
- I/O多路復(fù)用火欧,應(yīng)用程序在一個進程的上下文中顯示地調(diào)度它們自己的邏輯流棋电,因為程序是一個單獨的進程,所有的流共享同一個地址空間
- 線程苇侵,由內(nèi)核進行調(diào)度赶盔,可以看做是以上兩種方式的混合體
線程安全
當(dāng)一個函數(shù)被多個線程反復(fù)地調(diào)用時,它會一直產(chǎn)生正確的結(jié)果榆浓,這個函數(shù)是線程安全的于未。反之,該函數(shù)是線程不安全的陡鹃。
- 四個線程不安全函數(shù)類:
1烘浦、不保護共享變量的函數(shù)
2、保持跨越多個調(diào)用的狀態(tài)的函數(shù)
3萍鲸、返回指向靜態(tài)變量的指針的函數(shù)
4闷叉、調(diào)用線程不安全函數(shù)的函數(shù)
線程安全函數(shù):
可重入函數(shù):當(dāng)它們被多個線程調(diào)用時,不會引用任何共享數(shù)據(jù)脊阴。死鎖:一組線程被阻塞了握侧,等待一個永遠不可能為真的條件蚯瞧。
規(guī)避死鎖:給定所有互斥操作的一個全序,如果每個線程都是以一種順序獲得互斥鎖并以相反的順序釋放品擎,那么這個程序就是無死鎖的埋合。