国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 信號(hào)量的使用和注意事項(xiàng)

信號(hào)量的使用和注意事項(xiàng) 時(shí)間:2018-08-09      來(lái)源:未知

信號(hào)燈(信號(hào)量)集

POSIX 線程中的同步用的是無(wú)名信號(hào)量

進(jìn)程間的同步使用的是IPC 對(duì)象[信號(hào)燈集]

信號(hào)燈集:信號(hào)燈集合,每一個(gè)信號(hào)燈都可以用來(lái)表示一類資源,其值表示資源的個(gè)數(shù)

(1)創(chuàng)建信號(hào)燈集

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

參數(shù):

@key IPC_PRIVATE , ftok()

@nsems 信號(hào)燈集中信號(hào)燈的個(gè)數(shù)

@semflg IPC_CREAT | 0666,IPC_CREAT | IPC_EXCL

返回值:

成功返回ID,失敗返回-1

(2)初始化信號(hào)燈集中信號(hào)燈的值

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

參數(shù):

@semid 信號(hào)燈集的ID

@semnum 信號(hào)燈的編號(hào)[編號(hào)從0開(kāi)始]

@cmd SETVAL[設(shè)置信號(hào)燈的值] ,GETVAL(獲取信號(hào)燈的值),IPC_RMID[刪除信號(hào)燈集]

返回值:

成功返回0,失敗返回-1

思考:將信號(hào)燈集中的1號(hào)信號(hào)燈初始化為1?

union semun {

int val; /* Value for SETVAL */

struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */

unsigned short *array; /* Array for GETALL, SETALL */

struct seminfo *__buf; /* Buffer for IPC_INFO

(Linux-specific) */

};

void init_sem_value(int sem_id,int sem_num,int value)

{

union semun sem_val;

sem_val.val = value;

if(semctl(sem_id,sem_num,SETVAL,sem_val) < 0)

{

...

}

return ;

}

(3)PV操作

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

功能:完成PV操作

參數(shù):

@semid 信號(hào)燈集的ID

@sops 操作方式結(jié)構(gòu)體首地址

@nsops 操作信號(hào)燈的個(gè)數(shù)

返回值:

成功返回0,失敗返回-1

struct sembuf

{

unsigned short sem_num; /* semaphore number */

short sem_op; /* semaphore operation */

short sem_flg; /* operation flags */

};

sem_op :

<1>0 等待信號(hào)燈的值變成0

<2>1 釋放資源,V操作

<3>-1 申請(qǐng)資源,P操作

sem_flg:

0 : 阻塞方式

IPC_NOWAIT : 非阻塞方式調(diào)用

SEM_UNDO : 進(jìn)程結(jié)束的時(shí)候,它申請(qǐng)的資源自動(dòng)釋放

void P(int sem_id,int sem_num)

{

struct sembuf sem;

sem.sem_num = sem_num;

sem.sem_op = -1;

sem.sem_flg = 0;

if(semop(sem_id,&sem,1) < 0)

{

....

}

}

void V(int sem_id,int sem_num)

{

struct sembuf sem;

sem.sem_num = sem_num;

sem.sem_op = 1;

sem.sem_flg = 0;

if(semop(sem_id,&sem,1) < 0)

{

....

}

}

練習(xí):A,B通過(guò)信號(hào)燈集同步對(duì)共享內(nèi)存操作

讓創(chuàng)建信號(hào)燈集的進(jìn)程,初始化信號(hào)燈的值 ,如果信號(hào)燈集已經(jīng)存在則不初始化

sem_id = semget(key,2,IPC_CREAT | IPC_EXCL | 0666);

if(sem_id < 0)//信號(hào)燈集已經(jīng),不初始化信號(hào)燈值

{

sem_id = semget(key,2,IPC_CREAT | 0666);

}else{

//初始化信號(hào)燈集中信號(hào)燈的值

}

上一篇:分頻器設(shè)計(jì)原理淺析

下一篇:TFT-LCD常用接口分類

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部