Linux学习之系统编程篇:信号量(sem_init / wait / trywait / post / destroy)
一、信號量的初步認識
可以把信號量理解為加強版的互斥鎖
對于互斥鎖:
pthread_mutex_init () 初始化 一把互斥鎖后 :mutex = 1 ,代表有一把互斥鎖可用。
pthread_mutex_lock (), 加鎖 :mutex = 0 ,只有擁有鎖的線程(個數=1)可以訪問共享數據。
pthread_mutex_unlock (),解鎖 :mutex = 1 ,其他線程繼續搶鎖。
這就意味著,互斥鎖實現的同步是串行的。
對于信號量:
其實對互斥鎖進行了封裝,使得 mutex > 1,意味著可以允許多個線程同時訪問多個共享變量,即,信號量實現的同步是并行的。
二、信號量的相關函數
頭文件: #include <semaphore.h>
編譯需要加 -pthread
返回值(所有函數都一樣):
成功 : 0
失敗 : -1
(1)定義信號量:
(2)初始化信號量:
int sem_init(sem_t *sem, int pshared, unsigned int value);參數 1 :定義的信號量地址。
參數 2 :0 – 線程同步 1 – 進程同步。
參數 3 :最多有幾個 線程/進程 操作共享數據。
(3)加鎖:
注意:查看 sem 值,如果 > 0,調用一次,相當于對 sem 做減一操作(跟互斥鎖一樣)如果 sem=0,線程就會阻塞。
(4)嘗試加鎖:
注意:同樣,會引起 sem 做減一操作,但 sem=0 時候,線程不才會阻塞,會直接返回。
(5)解鎖:
(6)銷毀信號量:
int sem_destroy(sem_t *sem);總結
以上是生活随笔為你收集整理的Linux学习之系统编程篇:信号量(sem_init / wait / trywait / post / destroy)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网际协议:数据报格式和分片以及IPv4编
- 下一篇: Linux学习之系统编程篇:使用信号量实