mutex線程控制和信號量semaphore

 

linux應用程序使用到的保護機制 semaphore和pthread_mutex

1〉互斥鎖線程控制: Mutex 是一種簡單的加鎖的方法來控制對共享資源的存取。這個互斥鎖只有兩行狀態,上鎖和解鎖。可以把這種互斥鎖看成是某種全局變量,在同一時間只有一個線程掌握某個互斥鎖,擁有上鎖狀態的線程能夠對共享資源進行操作,若其他線程希望上鎖一個已經上了鎖的互斥鎖。該線程就會掛起。直到上鎖定線程釋放掉互斥鎖爲止。 可以這麼理解,互斥鎖使共享資源按照一定的順序在線程中被使用。 互斥鎖操作主要包括以下幾個步驟: 1, 互斥鎖初始化:pthread_mutex_init 2, 互斥鎖上鎖: pthread_mutex_lock 3, 互斥鎖判斷上鎖:pthread_mutex_trylock 4, 互斥鎖解鎖:pthread_mutex_unlock 5, 消除互斥鎖:pthread_mutex_destroy 
2〉信號量線程控制 信號量本質是上一個非負的整數計數器,它被用來控制對公共資源的訪問。 信號量實際上就是操作系統中所用到的PV原語,它廣泛的應用於進程或線程間的同步與互斥。 注:PV原語是對整數計數器信號量sem的操作,一次P操作使sem減一,而一次V操作使sem加一,進程(或線程)根據信號量的值來判斷是否可對公共資源具有訪問權。當信號量sem的值大於等於零時,該進程(或線程)就具有對公共資源的訪問權,如果sem的值小於零時,該進程(或線程)就一直阻塞直到信號量sem的值大於等於零爲止。 LINUX實現了POSIX的無名信號量,主要用於線程間的互斥與同步。只要用到以下幾個常用函數: sem_int 用於創建一個信號量,並能初始化它的值。 sem_wait和sem_trywait相當於P操作,它們都能將信號量減一,兩者的區別在於信號量小於零時, sem_wait將會阻塞進程,而sem_trywait會立即返回。 sem_post 相當於V操作,將信號量的值加一同時發出信號喚醒等待線程。 sem_getvalue 用於得到信號量的值。 sem_destroy 用於刪除信號量。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章