Vxworks中不同信號(hào)量的作用
1.semCCreate創(chuàng)建并初始化一個(gè)計(jì)數(shù)信號(hào)量
函數(shù)原型:
SEM_ID?semCCreate
( ????int?options,???????/*?semaphore?option?modes?*/ ????int?initialCount???/*?initial?count?*/ )
options選項(xiàng):
SEM_Q_PRIORITY?基于優(yōu)先級(jí)的,即優(yōu)先級(jí)高的優(yōu)先執(zhí)行;
SEM_Q_FIFO?基于隊(duì)列形式的,先進(jìn)先執(zhí)行;
initialCount???初始化一般設(shè)置為SEM_EMPTY(0)或者SEM_FULL(1);如果設(shè)置為0則代表在不SemGive()的情況下不可用,設(shè)置為1表示在不SemGive()的情況可以使用一次。
該信號(hào)量適用于任務(wù)間通信或者通知使用,倆個(gè)任務(wù)處于依賴(lài)關(guān)系執(zhí)行的情況。比如網(wǎng)絡(luò)接受任務(wù)和我數(shù)據(jù)處理任務(wù),每接收一包數(shù)據(jù)通知處理該數(shù)據(jù)的任務(wù)去處理數(shù)據(jù)。如果處理任務(wù)比較慢,那么該信號(hào)量會(huì)記住接收到的數(shù)據(jù)包,直到處理完成才會(huì)清空計(jì)數(shù)。一次可以連續(xù)SemGive出多個(gè)信號(hào)。
2.semMCreate創(chuàng)建并初始化一個(gè)互斥鎖信號(hào)量
函數(shù)原型:
SEM_ID?semMCreate ( ????int?options???/*?mutex?semaphore?options?*/ )
options選項(xiàng):
SEM_Q_PRIORITY?(0x1)基于優(yōu)先級(jí)的,即優(yōu)先級(jí)高的優(yōu)先執(zhí)行
SEM_Q_FIFO?基于隊(duì)列形式的,先進(jìn)先執(zhí)行;
SEM_DELETE_SAFE?(0x4)
SEM_INVERSION_SAFE?(0x8)
SEM_EVENTSEND_ERR_NOTIFY?(0x10)
SEM_INTERRUPTIBLE?(0x20)
該信號(hào)量適用于同一個(gè)函數(shù)被多個(gè)任務(wù)調(diào)用,但是如果同時(shí)調(diào)用的過(guò)程中可能發(fā)生沖突,使用該互斥信號(hào)量進(jìn)行保護(hù),例如出啊口或者網(wǎng)絡(luò)發(fā)送數(shù)據(jù)函數(shù)等。
3.semBCreate創(chuàng)建并初始化一個(gè)二進(jìn)制信號(hào)量
函數(shù)原型:
SEM_ID?semBCreate ( ????int?????????options,???????/*?semaphore?options?*/ ????SEM_B_STATE?initialState???/*?initial?semaphore?state?*/ )
options選項(xiàng):
SEM_Q_PRIORITY?基于優(yōu)先級(jí)的,即優(yōu)先級(jí)高的優(yōu)先執(zhí)行;
SEM_Q_FIFO?基于隊(duì)列形式的,先進(jìn)先執(zhí)行;
initialCount???初始化一般設(shè)置為SEM_EMPTY(0)或者SEM_FULL(1);如果設(shè)置為0則代表在不SemGive()的情況下不可用,設(shè)置為1表示在不SemGive()的情況可以使用一次。
適用于實(shí)時(shí)性同步的倆個(gè)任務(wù)之間通信,A任務(wù)做某個(gè)動(dòng)作,此時(shí)B任務(wù)也需要做某個(gè)動(dòng)作,但在B沒(méi)有及時(shí)做該動(dòng)作不要求之后再繼續(xù)做的情況下,使用該信號(hào)量。一次只能SemGive一個(gè)信號(hào)。