久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

歡迎來到高端IT就(jiu)業培訓(xun)專家——華清遠見教(jiao)育科技集團

400-611-6270

當前位置:IT培訓 > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 信號量是什么,大神全方位交給你
信號量是什么,大神全方位交給你
時間:2018-04-19作者:華清遠見

一(yi).首先我們必須知道什(shen)么是信號量

 信號量的本(ben)質是數據操(cao)作(zuo)鎖,它本(ben)身不具備數據交換功能,而(er)只是用于保護進程線程之間共享的資源(yuan),實現對共享資源(yuan)的同步與(yu)互斥(chi)操(cao)作(zuo)。

信號量相當于一把鎖(suo),例如小(xiao)黑(hei)上廁所,需要檢查是(shi)否有鎖(suo),有鎖(suo)獲取鎖(suo),占用(yong)廁所坑(keng)位資源,其(qi)他(ta)人無法進此坑(keng)位,當小(xiao)黑(hei)上完廁所,需要釋放鎖(suo),其(qi)他(ta)人都可以獲取鎖(suo)。

小黑 ------》 進(jin)程

門鎖 --------》 信號量

坑位 ------》 共享資源(信(xin)號(hao)量(liang)保(bao)護對(dui)象)

二.為什么要使(shi)用(yong)信號(hao)量

為了防(fang)止出現因多個(ge)(ge)程序同時(shi)訪問(wen)(wen)一(yi)個(ge)(ge)共享資源而引發的(de)(de)一(yi)系(xi)列(lie)問(wen)(wen)題,我(wo)們需(xu)(xu)要(yao)一(yi)種(zhong)方法(fa),在任一(yi)時(shi)刻(ke)只能有一(yi)個(ge)(ge)執行進(jin)程訪問(wen)(wen)代碼的(de)(de)臨界(jie)區域;臨界(jie)區域是指執行數據(ju)更新的(de)(de)代碼需(xu)(xu)獨占式地執行。而信號量(liang)(liang)就可以提(ti)供這樣(yang)的(de)(de)一(yi)種(zhong)訪問(wen)(wen)機制,讓一(yi)個(ge)(ge)臨界(jie)區同一(yi)時(shi)間只有一(yi)個(ge)(ge)進(jin)程在訪問(wen)(wen)它,也就是說信號量(liang)(liang)是用來調協進(jin)程對共享資源的(de)(de)訪問(wen)(wen)的(de)(de)。其(qi)中(zhong)共享內存的(de)(de)使用就要(yao)用到信號量(liang)(liang)。

臨(lin)界(jie)資源(yuan)(yuan):一次(ci)只允許一個(ge)(ge)進程(一個(ge)(ge)線程)使用的資源(yuan)(yuan)叫做臨(lin)界(jie)資源(yuan)(yuan)。

臨(lin)界(jie)區:訪問臨(lin)界(jie)資(zi)源(yuan)的代碼稱為臨(lin)界(jie)區。

三.信號量分(fen)類(lei):

1.System V信(xin)號(hao)燈(IPC對象(xiang)),也叫經典(dian)ipc對象(xiang),一般用于(yu)進(jin)程通信(xin)。

2.posix基(ji)于內(nei)存的信(xin)(xin)號燈(deng)(無名信(xin)(xin)號燈(deng)),一(yi)般線程通信(xin)(xin)。

功能分類:

1.二(er)值信號量(liang):信號量(liang)的值為0或1。與互斥鎖類似,資源可用(yong)時值為1,不可用(yong)時值為0。

2.計數信號量:值在0到n之間。用(yong)來(lai)統計資(zi)源,其值代表可用(yong)資(zi)源數。

注意:system v信(xin)(xin)號(hao)(hao)量對象不(bu)是(shi)一個(ge)信(xin)(xin)號(hao)(hao)量,是(shi)一個(ge)或者多個(ge)信(xin)(xin)號(hao)(hao)量的集合(he)。對應內核中一個(ge)結構(gou)體:struct semid_ds 有一個(ge)成(cheng)員sem_base指(zhi)向(xiang)第0個(ge)信(xin)(xin)號(hao)(hao)量結構(gou)體起始(shi)地址。

四.System v信號量實現(xian)步驟

-----》1、創建信號(hao)量對(dui)象

int semget(key_t key, int nsems, int semflg);

Key:創建信號量對(dui)象的唯(wei)一鍵(jian)值

nsems表示(shi)的就是(shi)創建的信(xin)(xin)號(hao)量(liang)(liang)集中信(xin)(xin)號(hao)量(liang)(liang)的個數

Semflg: 權限 IPC_CREAT:存在則(ze)(ze)打開,否(fou)(fou)則(ze)(ze)創建(jian); IPC_CREAT | IPC_EXCL存在則(ze)(ze)出錯返回(hui),否(fou)(fou)則(ze)(ze)創建(jian),這 樣保證了(le) 打開的(de)是一個全新(xin)的(de)信號(hao)量集

成功:信號量集ID 失敗-1

----》2.初始化具體信號量的值。

int semctl(int semid, int semnum, int cmd, union set);

semid:信號(hao)燈(deng)集(ji)ID

semnum: 要修改的信號燈編(bian)號

Cmd: GETVAL:獲取信號燈(deng)的值

SETVAL:設置信號燈的值(zhi)

IPC_RMID:從系統中刪除信號燈(deng)集合

-----》3.執行p操作(zuo):獲取資源(yuan)(yuan)(yuan),信號量(liang)值減1不(bu)阻塞,可以操作(zuo)資源(yuan)(yuan)(yuan);如果無資源(yuan)(yuan)(yuan)可用(yong),信號量(liang)值為0,阻塞等待資源(yuan)(yuan)(yuan)。

int semop(int semid, struct sembuf *sops, unsigned nsops);

semid:信(xin)號量集(ji)ID

struct sembuf {

short sem_num; // 要(yao)操作的(de)信號燈的(de)編(bian)號

short sem_op; // 0 : 等待,直到信號燈的值(zhi)變成(cheng)0

// 1 : 釋放資源,V操(cao)作

// -1 : 分配資源,P操作

short sem_flg; // 0, IPC_NOWAIT, SEM_UNDO

};

nops: 要操作的(de)信號(hao)燈(deng)的(de)個數

----》 操作資源: 共享(xiang)內存

-----》4.執行(xing)v操作:釋(shi)放資源(yuan),信(xin)號量值加1.

int semop(int semid, struct sembuf *sops, unsigned nsops);

-----》5.刪除對(dui)象

int semctl(int semid, int semnum, int cmd, ...);


發表評論

全國咨詢(xun)電話:400-611-6270,雙(shuang)休日及節(jie)假日請致電值班手機:15010390966

在線咨詢: 曹老(lao)師QQ(3337544669), 徐老(lao)師QQ(1462495461), 劉老(lao)師 QQ(3108687497)

企(qi)業培訓(xun)洽談專線:010-82600901,院(yuan)校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)

Copyright 2004-2018 華(hua)清(qing)遠見教育科技集團 版權所有 ,京(jing)ICP備16055225號,京(jing)公(gong)海(hai)網(wang)安備11010802025203號

有位(wei)老師想和您(nin)聊一聊