相交進(jìn)程之間的關(guān)系主要有兩種,同步與互斥。所謂互斥,是指散步在不同進(jìn)程之間的若干程序片斷,當(dāng)某個進(jìn)程運行其中一個程序片段時,其它進(jìn)程就不能運行它 們之中的任一程序片段,只能等到該進(jìn)程運行完這個程序片段后才可以運行。所謂同步,是指散步在不同進(jìn)程之間的若干程序片斷,它們的運行必須嚴(yán)格按照規(guī)定的 某種先后次序來運行,這種先后次序依賴于要完成的特定的任務(wù)。
顯然,同步是一種更為復(fù)雜的互斥,而互斥是一種特殊的同步。
也就是說互斥是兩個線程之間不可以同時運行,他們會相互排斥,必須等待一個線程運行完畢,另一個才能運行,而同步也是不能同時運行,但他是必須要安照某種次序來運行相應(yīng)的線程(也是一種互斥)!
總結(jié):互斥:是指某一資源同時只允許一個訪問者對其進(jìn)行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。
同步:是指在互斥的基礎(chǔ)上(大多數(shù)情況),通過其它機(jī)制實現(xiàn)訪問者對資源的有序訪問。在大多數(shù)情況下,同步已經(jīng)實現(xiàn)了互斥,特別是所有寫入資源的情況必定是互斥的。少數(shù)情況是指可以允許多個訪問者同時訪問資源。
讀寫鎖特點:
1)多個讀者可以同時進(jìn)行讀 2)寫者必須互斥(只允許一個寫者寫,也不能讀者寫者同時進(jìn)行) 3)寫者優(yōu)先于讀者(一旦有寫者,則后續(xù)讀者必須等待,喚醒時優(yōu)先考慮寫者)
互斥鎖特點:
一次只能一個線程擁有互斥鎖,其他線程只有等待
互斥鎖
pthread_mutex_init()
pthread_mutex_lock()
pthread_mutex_unlock()
讀寫鎖
pthread_rwlock_init()
pthread_rwlock_rdlock()
pthread_rwlock_wrlock()
pthread_rwlock_unlock()
條件變量
pthread_cond_init()
pthread_cond_wait()
pthread_cond_signal()