亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? semblib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
    }/********************************************************************************* semBInit - initialize a declared binary semaphore** The initialization of a static binary semaphore, or a binary semaphore* embedded in some larger object need not deal with allocation.* This routine may be called to initialize such a semaphore.  The semaphore* is initialized to the specified initial state of either SEM_FULL or SEM_EMPTY.** Binary semaphore options include the queuing style for blocked tasks.* Tasks can be queued on the basis of their priority or first-in-first-out.* These options are SEM_Q_PRIORITY and SEM_Q_FIFO respectively.** SEE ALSO: semBCreate()** NOMANUAL*/STATUS semBInit    (    SEMAPHORE  *pSemaphore,             /* pointer to semaphore to initialize */    int         options,                /* semaphore options */    SEM_B_STATE initialState            /* initial semaphore state */    )    {    if ((!semBLibInstalled) && (semBLibInit () != OK))	/* initialize package */	return (ERROR);    if (semQInit (pSemaphore, options) != OK)		/* initialize queue */	return (ERROR);    return (semBCoreInit (pSemaphore, options, initialState));    }/********************************************************************************* semBCoreInit - initialize a binary semaphore with queue already initialized** To initialize a semaphore with some special queuing algorithm, this routine* is used.  This routine will initialize a binary semaphore without* initializing the queue.** ERRNO: S_semLib_INVALID_OPTION, S_semLib_INVALID_STATE** NOMANUAL*/STATUS semBCoreInit    (    SEMAPHORE  *pSemaphore,             /* pointer to semaphore to initialize */    int         options,                /* semaphore options */    SEM_B_STATE initialState            /* initial semaphore state */    )    {    if ((options & SEM_INVERSION_SAFE) || (options & SEM_DELETE_SAFE))	{	errno = S_semLib_INVALID_OPTION;	return (ERROR);	}    switch (initialState)	{	case SEM_EMPTY:	    pSemaphore->semOwner = taskIdCurrent;	/* semaphore empty */	    break;	case SEM_FULL:	    pSemaphore->semOwner = NULL;		/* semaphore full */	    break;	default:	    errno = S_semLib_INVALID_STATE;	    return (ERROR);	}    pSemaphore->recurse = 0;				/* no recursive takes */    pSemaphore->options = options;			/* stow away options */    pSemaphore->semType = SEM_TYPE_BINARY;		/* type is binary */    eventInit (&pSemaphore->events);			/* initialize events */#ifdef WV_INSTRUMENTATION    /* windview - connect instrumented class for level 1 event logging */    if (wvObjIsEnabled)        objCoreInit (&pSemaphore->objCore, semInstClassId);    else #endif    objCoreInit (&pSemaphore->objCore, semClassId); /* initialize core */    return (OK);    }#ifdef semBLib_PORTABLE/********************************************************************************* semBGive - give semaphore** Gives the semaphore.  If a higher priority task has already taken* the semaphore (so that it is now pended waiting for it), that task* will now become ready to run, and preempt the task that does the semGive().* If the semaphore is already full (it has been given but not taken) this* call is essentially a no-op.** NOMANUAL*/STATUS semBGive    (    SEM_ID semId        /* semaphore ID to give */    )    {    int level = intLock ();			/* LOCK INTERRUPTS */    WIND_TCB * pOwner;    if (OBJ_VERIFY (semId, semClassId) != OK)	{	intUnlock (level);			/* UNLOCK INTERRUPTS */	return (ERROR);	}    pOwner = semId->semOwner;    if ((semId->semOwner = (WIND_TCB *) Q_FIRST (&semId->qHead)) == NULL)	{	int    	oldErrno;	STATUS  evStatus;	STATUS 	retStatus;	retStatus = OK;	/* check change of state; if so, send events */	if ((semId->events.taskId != (int)NULL) && (pOwner != NULL))	    {	    kernelState = TRUE;	    intUnlock (level);			/* UNLOCK INTERRUPTS */	    oldErrno = errno;	    evStatus = eventRsrcSend(semId->events.taskId,				     semId->events.registered);	    if (evStatus != OK)		{		if ((semId->options & SEM_EVENTSEND_ERR_NOTIFY) != 0x0)		    {		    retStatus = ERROR;		    oldErrno = S_eventLib_EVENTSEND_FAILED;		    }		semId->events.taskId = (int)NULL;		}	    else if ((semId->events.options & EVENTS_SEND_ONCE) != 0x0)		semId->events.taskId = (int)NULL;	    windExit ();	    errno = oldErrno;	    return (retStatus);	    }	else	    intUnlock (level);	}    else	{	kernelState = TRUE;			/* KERNEL ENTER */ 	intUnlock (level);			/* UNLOCK INTERRUPTS */#ifdef WV_INSTRUMENTATION	/* windview - level 2 event logging */	EVT_TASK_1 (EVENT_OBJ_SEMGIVE, semId);#endif	windPendQGet (&semId->qHead);		/* unblock a task */	windExit ();				/* KERNEL EXIT */	}    return (OK);    }/********************************************************************************* semBTake - take semaphore** Takes the semaphore.  If the semaphore is empty, i.e., it has not been given* since the last semTake() or semInit(), this task will become pended until* the semaphore becomes available by some other task doing a semGive()* of it.  If the semaphore is already available, this call will empty* the semaphore, so that no other task can take it until this task gives* it back, and this task will continue running.** WARNING* This routine may not be used from interrupt level.** NOMANUAL*/STATUS semBTake    (    SEM_ID semId,       /* semaphore ID to take */    int timeout         /* timeout in ticks */    )    {    int level;    int status;    if (INT_RESTRICT () != OK)	return (ERROR);again:    level = intLock ();				/* LOCK INTERRUPTS */    if (OBJ_VERIFY (semId, semClassId) != OK)	{	intUnlock (level);			/* UNLOCK INTERRUPTS */	return (ERROR);	}    if (semId->semOwner == NULL)	{	semId->semOwner = taskIdCurrent;	/* update semaphore state */	intUnlock (level);			/* UNLOCK INTERRUPTS */	return (OK);	}    kernelState = TRUE;				/* KERNEL ENTER */    intUnlock (level);				/* UNLOCK INTERRUPTS */#ifdef WV_INSTRUMENTATION    /* windview - level 2 event logging */    EVT_TASK_1 (EVENT_OBJ_SEMTAKE, semId);#endif    if (windPendQPut (&semId->qHead, timeout) != OK)	{	windExit ();				/* KERNEL EXIT */	return (ERROR);	}    if ((status = windExit ()) == RESTART)	/* KERNEL EXIT */	{	timeout = SIG_TIMEOUT_RECALC(timeout);	goto again;	}    return (status);    }#endif	/* semBLib_PORTABLE *//********************************************************************************* semBGiveDefer - give semaphore as deferred work** Gives the semaphore.  If a higher priority task has already taken* the semaphore (so that it is now pended waiting for it), that task* will now become ready to run, and preempt the task that does the semGive().* If the semaphore is already full (it has been given but not taken) this* call is essentially a no-op.** NOMANUAL*/void semBGiveDefer    ( SEM_ID semId        /* semaphore ID to give */    )    {    WIND_TCB * pOwner = semId->semOwner;    if ((semId->semOwner = (WIND_TCB *) Q_FIRST (&semId->qHead)) != NULL)	{#ifdef WV_INSTRUMENTATION    	/* windview - level 2 event logging */	EVT_TASK_1 (EVENT_OBJ_SEMGIVE, semId);#endif	windPendQGet (&semId->qHead);		/* unblock a task */	}    else /* check for change of state, send events if registered */	{	if ((semId->events.taskId != (int)NULL) && (pOwner != NULL))	    {	    if (eventRsrcSend(semId->events.taskId,			      semId->events.registered) != OK)		{		semId->events.taskId = (int)NULL;		}	    else if ((semId->events.options & EVENTS_SEND_ONCE) != 0x0 )		semId->events.taskId = (int)NULL;	    }	}    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线看| 在线观看av一区| 日韩亚洲欧美在线| 亚洲韩国精品一区| 欧美日免费三级在线| 一区二区三区不卡视频| 91免费观看视频| 亚洲色图19p| 欧美在线观看一区| 亚洲自拍偷拍综合| 欧美区视频在线观看| 午夜精品久久久久久久久久 | 奇米综合一区二区三区精品视频| 色悠悠久久综合| 亚洲五码中文字幕| 91麻豆精品国产91久久久使用方法 | 91精品国产综合久久精品麻豆| 日韩精品一区第一页| 日韩一区二区三区av| 捆绑调教一区二区三区| 久久中文字幕电影| 成人免费毛片a| 亚洲专区一二三| 91精品国产欧美一区二区成人| 久久成人精品无人区| 国产网红主播福利一区二区| 成人网男人的天堂| 亚洲一级二级三级| 日韩欧美高清一区| 成人福利电影精品一区二区在线观看| 亚洲天堂a在线| 欧美日韩国产欧美日美国产精品| 麻豆国产精品一区二区三区 | 日韩欧美精品在线| 国产成人久久精品77777最新版本| 亚洲欧美自拍偷拍| 在线综合视频播放| 成人免费视频一区| 偷窥国产亚洲免费视频| 2024国产精品| 欧美综合天天夜夜久久| 精品在线观看免费| 亚洲精品第1页| 精品少妇一区二区三区视频免付费| 高清在线成人网| 丝袜美腿亚洲一区| 国产精品不卡一区二区三区| 欧美另类久久久品| 成人av免费网站| 裸体健美xxxx欧美裸体表演| 中文字幕国产精品一区二区| 91精品视频网| 色婷婷综合激情| 国产激情精品久久久第一区二区 | 亚洲激情校园春色| 精品福利一区二区三区免费视频| 色婷婷av一区| 国产伦精品一区二区三区视频青涩 | 中文字幕va一区二区三区| 欧美日韩在线不卡| 国产suv精品一区二区三区| 亚洲福利电影网| 中文字幕一区二区三区不卡| 日韩一级大片在线| 欧美性猛交xxxxxx富婆| 国产成人精品网址| 理论电影国产精品| 丝袜诱惑制服诱惑色一区在线观看| 亚洲欧洲综合另类| 国产午夜三级一区二区三| 欧美美女直播网站| 欧美视频一区二区三区四区 | 欧美老年两性高潮| 91亚洲国产成人精品一区二区三| 国产真实乱对白精彩久久| 日韩精品欧美精品| 性做久久久久久久免费看| 一区二区三区在线观看网站| 国产精品免费免费| 国产精品另类一区| 欧美国产激情二区三区| 久久综合久久鬼色| 久久这里只有精品视频网| 精品动漫一区二区三区在线观看| 777午夜精品视频在线播放| 在线观看免费亚洲| 欧美日韩一区视频| 欧美日韩日本视频| 欧美一级欧美三级在线观看| 欧美日韩国产123区| 欧美日韩一区二区三区不卡| 在线观看日韩av先锋影音电影院| 欧美伊人久久久久久久久影院| 色婷婷av一区| 欧美日韩一区二区在线视频| 色婷婷av一区二区三区软件| 蜜臀av性久久久久蜜臀aⅴ | 久久精品国产亚洲高清剧情介绍| 亚洲欧洲日产国产综合网| 国产精品五月天| 亚洲国产电影在线观看| 久久久久国产精品麻豆ai换脸| 日韩女优电影在线观看| 欧美高清性hdvideosex| 欧美性猛片aaaaaaa做受| 国产91精品入口| 色悠悠久久综合| 欧美视频一二三区| 欧美午夜电影一区| 欧美一区二区免费观在线| 欧美色偷偷大香| 欧美人妖巨大在线| 欧美一区二区三区电影| 在线免费观看成人短视频| 欧美精品在线视频| 欧美一区二区三区免费在线看| 欧美高清一级片在线| 在线成人av网站| 日韩一区和二区| 欧美va在线播放| 日韩欧美亚洲一区二区| 久久无码av三级| 国产精品亲子乱子伦xxxx裸| 国产清纯美女被跳蛋高潮一区二区久久w| www激情久久| 中文字幕在线视频一区| 亚洲三级理论片| 亚洲18女电影在线观看| 极品少妇xxxx偷拍精品少妇| 国产精品69久久久久水密桃| gogogo免费视频观看亚洲一| 色狠狠一区二区三区香蕉| 欧美丝袜丝交足nylons图片| 在线综合视频播放| 欧美xxxx在线观看| 亚洲精品大片www| 久久激情综合网| 成人av网在线| 欧美午夜寂寞影院| 7777精品伊人久久久大香线蕉| 欧美一级久久久久久久大片| 国产亚洲制服色| 亚洲狠狠爱一区二区三区| 久久国产精品色婷婷| 韩日精品视频一区| 欧美精品丝袜中出| 国产欧美日韩精品a在线观看| 一区二区三区在线看| 久久精品国产在热久久| www..com久久爱| 欧美色网一区二区| 国产精品久久久久影院| 天堂在线亚洲视频| 成人免费视频免费观看| 在线综合视频播放| 亚洲精品视频自拍| 日本成人在线不卡视频| 91精品福利在线| 久久精品亚洲一区二区三区浴池| 一区二区三区中文免费| 精品一区二区三区在线播放| 91猫先生在线| 欧美极品aⅴ影院| 国产一区二区不卡老阿姨| 色88888久久久久久影院按摩| 精品国产乱码久久久久久免费| 亚洲一区二区精品久久av| 成人性生交大合| 欧美午夜在线一二页| 亚洲另类中文字| 国产东北露脸精品视频| 欧美丰满一区二区免费视频 | 欧美中文字幕一区| 国产精品免费aⅴ片在线观看| 美美哒免费高清在线观看视频一区二区| 一本大道久久精品懂色aⅴ| 精品成人佐山爱一区二区| 亚洲成av人片| 欧美婷婷六月丁香综合色| 国产精品久久久久久久久果冻传媒| 视频一区二区三区在线| 欧美乱妇23p| 肉丝袜脚交视频一区二区| 91在线观看成人| 亚洲欧洲精品一区二区三区不卡| 国产一区二区三区免费观看| 久久久一区二区三区捆绑**| 日韩经典中文字幕一区| 欧美日韩你懂得| 午夜久久久久久久久| 欧美体内she精高潮| 亚洲精品美腿丝袜| 色综合天天在线| 亚洲精品成人少妇| 色婷婷久久综合| 亚洲欧美一区二区三区久本道91| 国产·精品毛片| √…a在线天堂一区| 91在线观看成人| 亚洲在线一区二区三区|