日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux学习之系统编程篇:信号量(sem_init / wait / trywait / post / destroy)

發布時間:2024/9/30 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)定義信號量:

sem_t sem

(2)初始化信號量:

int sem_init(sem_t *sem, int pshared, unsigned int value);

參數 1 :定義的信號量地址。
參數 2 :0 – 線程同步 1 – 進程同步。
參數 3 :最多有幾個 線程/進程 操作共享數據。
(3)加鎖:

int sem_wait(sem_t *sem);

注意:查看 sem 值,如果 > 0,調用一次,相當于對 sem 做減一操作(跟互斥鎖一樣)如果 sem=0,線程就會阻塞。
(4)嘗試加鎖:

int sem_trywait(sem_t *sem);

注意:同樣,會引起 sem 做減一操作,但 sem=0 時候,線程不才會阻塞,會直接返回。
(5)解鎖:

int sem_post(sem_t *sem); // 對 sem 做++操作

(6)銷毀信號量:

int sem_destroy(sem_t *sem);

總結

以上是生活随笔為你收集整理的Linux学习之系统编程篇:信号量(sem_init / wait / trywait / post / destroy)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。