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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? _pthreadlib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* _pthreadLib.c - POSIX 1003.1c thread library kernel support *//* Copyright 1984-2002 Wind River Systems, Inc.  *//* Copyright (c) 1995 by Dot4, Inc. */#include "copyright_wrs.h"/*modification history--------------------01f,03may02,gls  fixed memory leak when user specifies stack (SPR #76769)01e,22apr02,gls  removed references to AE in comments (SPR #75799)01d,26nov01,gls  changed stackAddr to char * for DIAB support01c,31oct01,jgn  fix rounding of stack size (SPR #71350)01b,22oct01,jgn  correct scheduling policy inheritance (SPR #71125)01a,10sep00,jgn  created from pthreadLib.c version 01c (SPR #33375) +		 ensure TCB pdId set always (SPR #33711)*//*DESCRIPTIONKernel support routines for the VxWorks pthreads implementation. NOMANUAL*//* includes */#include "vxWorks.h"#include "intLib.h"#include "kernelLib.h"#include "private/schedP.h"#include "private/taskLibP.h"#include "pthread.h"#include "semLib.h"#include "string.h"#include "taskLib.h"#include "taskArchLib.h"#include "taskHookLib.h"#include "limits.h"#undef PTHREADS_DEBUG#ifdef PTHREADS_DEBUG#undef LOCAL#define LOCAL#endif/* defines */#define DEF_STACK_SIZE  (20 * 1024)#define MY_PTHREAD ((internalPthread *)(taskIdCurrent->pPthread))#define CANCEL_LOCK(pThread)    semTake((pThread)->cancelSemId, WAIT_FOREVER)#define CANCEL_UNLOCK(pThread)  semGive((pThread)->cancelSemId)/* * Need copies of these since we are going to have to pass in the current * PD's numbering scheme to _pthreadCreate() and can't use the existing * global variable that the original macros use... */#define PX_VX_PRI_CONV(mode,pri) (mode ? (POSIX_HIGH_PRI - pri) : pri)/* locals */LOCAL BOOL	pthreadLibInited	= FALSE;LOCAL FUNCPTR	pthreadDeleteTaskEntry	= NULL;LOCAL pthread_attr_t defaultPthreadAttr =                               \    {                                                                   \    PTHREAD_INITIALIZED,        /* object status      */                \    ((size_t) 0),               /* stacksize          */                \    NULL,                       /* stackaddr          */                \    PTHREAD_CREATE_JOINABLE,    /* detachstate        */                \    PTHREAD_SCOPE_SYSTEM,       /* contentionscope    */                \    PTHREAD_INHERIT_SCHED,      /* inheritsched       */                \    SCHED_RR,                   /* schedpolicy        */                \    NULL,                       /* name               */                \    {0},                        /* struct sched_param */                \    };/* externals */IMPORT BOOL	vxTas (void *addr);IMPORT BOOL	roundRobinOn;IMPORT ULONG	roundRobinSlice;/* forward references */LOCAL void deleteHook (WIND_TCB *pTcb);/********************************************************************************* _pthreadLibInit - initialize POSIX threads support** This routine initializes the POSIX threads (<pthreads>) support for* VxWorks. It should only be called via pthreadLibInit() since it needs to* register the delete hook's user level function.** Multiple attempts to initialise are ignored, but the delete hook function will* be changed. This is to ensure that if the user level code is replaced then* the new function pointer will be available.** RETURNS: N/A** NOMANUAL*/STATUS _pthreadLibInit    (    FUNCPTR	deleteTask		/* user level code for delete hook */    )    {    /* Always store this in case it is simply being changed */    pthreadDeleteTaskEntry = deleteTask;    taskLock();    if (pthreadLibInited)	{	taskUnlock();	return OK;	}    if (taskDeleteHookAdd((FUNCPTR) deleteHook) == ERROR)	{	if (_func_logMsg != NULL)	    _func_logMsg ("taskDeleteHookAdd of pthread deleteHook failed!\n",			  0, 0, 0, 0, 0, 0);	}    else	{	pthreadLibInited = TRUE;	_func_pthread_setcanceltype = _pthreadSetCancelType;	}    taskUnlock();    return ((pthreadLibInited == TRUE) ? OK : ERROR);    }/* * Section 16 - Thread Management *//********************************************************************************* _pthreadCreate - create a thread (POSIX)** This is the actual thread creation function. It is called by the user level* pthread_create() function.** NOMANUAL*/int _pthreadCreate    (    pthread_t *			pThread,    const pthread_attr_t *	pAttr,    void *			(*wrapperFunc)(void *),    void *			(*start_routine)(void *),    void *			arg,    int				priNumMode    )    {    char name[NAME_MAX];    char *      pBufStart;      /* points to temp name buffer start */    char *      pBufEnd;        /* points to temp name buffer end */    char        temp;           /* working character */    int         value;          /* working value to convert to ascii */    int         nPreBytes;      /* nameless prefix string length */    int         nBytes    = 0;  /* working nameless name string length */    static int		namecntr	= {0};    static char *	prefix		= "pthr";    static char *digits = "0123456789";    WIND_TCB *		pTcb;    internalPthread *	pMyThread;    char *		stackaddr	= NULL;    int			stacksize;    if (!pThread)	return (EINVAL);    if (!pthreadLibInited)	return (EINVAL);    if (pAttr && pAttr->threadAttrStatus != PTHREAD_INITIALIZED)	return (EINVAL);    else if (!pAttr)	pAttr = &defaultPthreadAttr;    /*     * Make sure that sched policy is supported, valid, and matches global     * policy. Only perform this test if the inheritsched attribute is set     * to PTHREAD_EXPLICIT_SCHED though; if we are inheriting then we'll get     * it right by definition (no need to worry about finding out the current     * policy since for VxWorks it is system-wide).     */    if (pAttr->threadAttrInheritsched == PTHREAD_EXPLICIT_SCHED)	{	if ((pAttr->threadAttrSchedpolicy == SCHED_OTHER)		||	    ((roundRobinOn == TRUE) &&			  (pAttr->threadAttrSchedpolicy != SCHED_RR))	||	    ((roundRobinOn == FALSE) &&			  (pAttr->threadAttrSchedpolicy != SCHED_FIFO)))	    {	    errno = ENOTTY;	    return (ENOTTY);	    }	}    if (!(pMyThread = malloc(sizeof (internalPthread))))	return (EAGAIN);    bzero((char *)pMyThread, sizeof (internalPthread));    /*     * If zero is specified, use the default stack size, otherwise use the     * specified size, rounded up to PTHREAD_STACK_MIN if necessary.     */    if (pAttr->threadAttrStacksize == 0)	{	stacksize = DEF_STACK_SIZE;	}    else	{	stacksize = max(pAttr->threadAttrStacksize, PTHREAD_STACK_MIN);	}    if (pAttr->threadAttrStackaddr)	{	pMyThread->flags |= STACK_PASSED_IN;	stackaddr = pAttr->threadAttrStackaddr;	}    if (pAttr->threadAttrDetachstate == PTHREAD_CREATE_JOINABLE)	{	pMyThread->flags |= JOINABLE;	if ((pMyThread->exitJoinSemId = semBCreate(SEM_Q_PRIORITY,						   SEM_EMPTY)) == NULL)	    {	    free(pMyThread);	    return (EAGAIN);	    }	}    if ((pMyThread->mutexSemId =			semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE)) == NULL)	{	semDelete(pMyThread->exitJoinSemId);	free(pMyThread);	return (EAGAIN);	}    if ((pMyThread->cancelSemId =			semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE)) == NULL)	{	semDelete(pMyThread->mutexSemId);	semDelete(pMyThread->exitJoinSemId);	free(pMyThread);	return (EAGAIN);	}    /* create name for the task */    if (pAttr && pAttr->threadAttrName == NULL)       {      strcpy (name, prefix);                  /* copy in prefix */      nBytes = strlen (name);                 /* calculate prefix length */      nPreBytes = nBytes;                     /* remember prefix strlen() */      value  = ++ namecntr;                   /* bump the nameless count */       do                                      /* crank out digits backwards */	  {	  name [nBytes++] = digits [value % 10];	  value /= 10;                              /* next digit */	  }      while (value != 0);                           /* until no more digits */       pBufStart = name + nPreBytes;        /* start reverse after prefix */      pBufEnd   = name + nBytes - 1;       /* end reverse at EOS */       while (pBufStart < pBufEnd)          /* reverse the digits */	  {	  temp        = *pBufStart;	  *pBufStart  = *pBufEnd;	  *pBufEnd    = temp;	  pBufEnd--;	  pBufStart++;	  }      name[nBytes] = EOS;                      /* EOS terminate string */      }     else 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99日本精品| 日韩精品一区二区三区老鸭窝| 国产成a人亚洲| 激情小说欧美图片| 激情久久五月天| 国产精品99久久久久久有的能看| 狠狠色丁香久久婷婷综合丁香| 狠狠色丁香久久婷婷综合_中 | 亚洲另类色综合网站| 中文字幕视频一区二区三区久| 中文字幕中文乱码欧美一区二区| 亚洲天堂2016| 亚洲高清三级视频| 日本vs亚洲vs韩国一区三区二区 | 在线电影欧美成精品| 欧美卡1卡2卡| 亚洲精品在线免费播放| 国产香蕉久久精品综合网| 欧美经典一区二区| 亚洲免费视频中文字幕| 亚洲大尺度视频在线观看| 日韩电影在线观看网站| 久久国产精品一区二区| 粉嫩av一区二区三区在线播放| 91色九色蝌蚪| 欧美狂野另类xxxxoooo| www久久精品| 亚洲欧美国产高清| 五月婷婷色综合| 国模娜娜一区二区三区| 成人动漫一区二区| 欧美日韩国产首页| 久久久久久9999| 亚洲乱码国产乱码精品精的特点 | 国产成人亚洲综合a∨猫咪| 91在线视频播放| 777欧美精品| 国产精品美女久久久久久久网站| 亚洲午夜一区二区三区| 久久国产精品99久久久久久老狼 | 中文字幕巨乱亚洲| 亚洲午夜国产一区99re久久| 蜜桃av一区二区三区电影| 成人久久18免费网站麻豆 | 一区二区三区四区国产精品| 日本中文一区二区三区| 不卡的看片网站| 在线综合视频播放| 国产精品毛片久久久久久| 首页国产丝袜综合| 成人午夜精品在线| 欧美高清激情brazzers| 国产精品色呦呦| 日韩高清在线观看| 99麻豆久久久国产精品免费| 欧美一二三区在线观看| 亚洲视频香蕉人妖| 狠狠色狠狠色综合| 欧美精品第1页| 成人网在线播放| 欧美日本精品一区二区三区| 国产精品五月天| 蜜桃一区二区三区四区| 色999日韩国产欧美一区二区| 久久久久免费观看| 五月天欧美精品| 色一情一乱一乱一91av| 久久久久国产精品麻豆| 午夜不卡av在线| 91小视频在线免费看| 国产视频一区在线观看| 久久精品国内一区二区三区 | 伊人夜夜躁av伊人久久| 国产精品一区二区三区99| 51精品国自产在线| 亚洲香肠在线观看| 色综合色狠狠天天综合色| 久久精品一区二区三区不卡 | 欧美中文字幕一区| 国产精品欧美极品| 精品一区二区国语对白| 在线不卡中文字幕播放| 亚洲综合自拍偷拍| 91在线观看高清| 国产精品福利在线播放| 国产精品影视在线| 2017欧美狠狠色| 蜜臂av日日欢夜夜爽一区| 欧美疯狂做受xxxx富婆| 亚洲国产日韩a在线播放性色| 91色综合久久久久婷婷| 亚洲视频图片小说| av爱爱亚洲一区| 1024亚洲合集| 91丝袜呻吟高潮美腿白嫩在线观看| 日本一区二区三区在线不卡| 国产河南妇女毛片精品久久久| 久久这里都是精品| 国产成人综合视频| 国产人妖乱国产精品人妖| 精品久久久久一区| 国产综合久久久久久久久久久久| 欧美成人一区二区三区片免费| 九九精品一区二区| www国产精品av| 国模一区二区三区白浆| 亚洲精品一区二区三区在线观看| 久久99在线观看| 久久久久久久久蜜桃| 国产激情一区二区三区| 国产农村妇女精品| 成人黄色免费短视频| 亚洲视频免费观看| 欧美日韩一区在线观看| 日韩精品成人一区二区三区| 日韩欧美另类在线| 国产suv精品一区二区6| 国产精品福利影院| 欧美亚洲图片小说| 奇米一区二区三区| 国产亚洲一区字幕| 97久久超碰国产精品电影| 亚洲观看高清完整版在线观看| 日韩一级高清毛片| 懂色av中文字幕一区二区三区| 国产精品欧美极品| 欧美性做爰猛烈叫床潮| 日韩精品福利网| 国产日韩视频一区二区三区| av电影在线不卡| 亚洲国产日韩综合久久精品| 日韩一卡二卡三卡国产欧美| 国产精品一区二区男女羞羞无遮挡| 国产精品久久免费看| 欧美三级视频在线播放| 精品一区二区国语对白| 国产精品久99| 欧美狂野另类xxxxoooo| 国产成人在线色| 亚洲国产美女搞黄色| 精品久久国产老人久久综合| 波多野结衣精品在线| 亚洲成人福利片| 久久久国产综合精品女国产盗摄| 一本色道**综合亚洲精品蜜桃冫| 日本麻豆一区二区三区视频| 中文乱码免费一区二区| 欧美久久婷婷综合色| 成人性生交大片| 丝袜亚洲另类丝袜在线| 国产精品家庭影院| 日韩视频123| 一本久久a久久精品亚洲| 久久精品99国产国产精| 亚洲精品久久7777| 2020国产精品久久精品美国| 在线精品亚洲一区二区不卡| 韩国v欧美v亚洲v日本v| 一区二区高清在线| 久久久久久电影| 91精品啪在线观看国产60岁| 99国产精品国产精品久久| 美女视频一区二区| 亚洲综合清纯丝袜自拍| 日本一区二区三区国色天香 | 国产亚洲欧洲997久久综合 | 中文字幕日本不卡| 日韩精品影音先锋| 精品视频在线看| 99精品视频中文字幕| 精品一区二区在线观看| 偷拍与自拍一区| 亚洲激情成人在线| 中文在线一区二区 | 久久精品国产精品亚洲红杏| 亚洲精品伦理在线| 国产欧美精品一区| 精品三级在线观看| 欧美精品免费视频| 欧日韩精品视频| 色综合色狠狠天天综合色| 国产91丝袜在线18| 国产综合成人久久大片91| 日本成人在线看| 午夜精品久久久久影视| 亚洲精品伦理在线| 亚洲女与黑人做爰| 国产精品每日更新| 国产精品视频观看| 欧美国产一区二区在线观看| 日韩美女一区二区三区四区| 欧美蜜桃一区二区三区| 欧美亚洲一区二区在线| 91久久免费观看| 色天天综合久久久久综合片| www.66久久| 一本色道综合亚洲| 91免费观看视频在线| 91香蕉视频黄| 91色视频在线|