⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdblab.c

📁 Vxworks的培训教程,大家分享下啊,
💻 C
字号:
/* rdbLab.c - Using CrossWind, nyuk, nyuk, nyuk! */#include "vxWorks.h"#include "stdio.h"#include "stdlib.h"#include "taskLib.h"#include "semLib.h"typedef struct stoogeStruct     {    char *name;    struct stoogeStruct *next;    } STOOGE, *STOOGE_LIST;#define NUM_STOOGES 4 /* global variables */char *stoogeName[NUM_STOOGES] = {"Larry", "Moe", "Curly", "Shempf"};volatile int number = 0;SEM_ID mutex = NULL;	/* mutual exclusion semaphore for number *//* foward declarations */STOOGE_LIST stoogeMakeList (void);void stoogeTalk (STOOGE_LIST stoogeList);void stoogeFreeList (STOOGE_LIST stoogeList);void stoogeNumberInc (void);void stoogeMutex (void);/********************************************************************************* stoogeStart - do the stooge thing.** This routine creates a linked list of stooges. Each stooge in turn says* "Nyuk, nyuk, nyuk". The list is then freed up.** RETURNS: VOID*/void stoogeStart (void)    {    STOOGE_LIST stoogeList;    if (mutex == NULL)		/* first time through, create mutex */	stoogeMutex ();    stoogeList = stoogeMakeList ();    printf("\n%5s (%2d) : Oh, a wise guy, eh?\n", taskName(0), number);    stoogeTalk (stoogeList);    stoogeFreeList (stoogeList);    }/*************************************************************************** stoogeMutex - create mutex for <number>** This routine creates a mutual exclusion semaphore <mutex> guarding* access to the global integer <number>. * * Semaphores will be covered in detail in a later chapter.*/void stoogeMutex (void)    {    if ( (mutex = semMCreate (SEM_Q_PRIORITY | 		 	      SEM_INVERSION_SAFE |			      SEM_DELETE_SAFE))	 == NULL)	{	printf ("stoogeInit: Creation of mutex failed. Exiting.\n");	exit(0);	}    }/********************************************************************************* stoogeMakeList - make a linked list of stooges.** RETURNS: a pointer to this list.*/STOOGE_LIST stoogeMakeList (void)    {    STOOGE *oldStooge = NULL;    STOOGE *newStooge;    int i;    for (i=0; i<NUM_STOOGES; i++)		{		newStooge = (STOOGE *)malloc(sizeof(STOOGE));		newStooge->next = oldStooge;		newStooge->name = stoogeName[NUM_STOOGES - i - 1];		oldStooge = newStooge;		}    stoogeNumberInc ();    return (newStooge);    }    /********************************************************************************* stoogeTalk - let each stooge say "Nyuk, nyuk, nyuk"** RETURNS: VOID*/void stoogeTalk    (    STOOGE_LIST stoogeList    )    {    STOOGE *stooge = stoogeList;    while (stooge != NULL)		{		printf("%10s : Nyuk, nyuk, nyuk\n", stooge->name);		stooge = stooge->next;		}    stoogeNumberInc ();    }/******************************************************************************** stoogeFreeList - free the linked list of stooges.** RETURNS: VOID*/void stoogeFreeList    (    STOOGE_LIST stoogeList    )    {    STOOGE *stooge, *nextStooge;    stooge = stoogeList;        while (stooge!=NULL)		{		nextStooge = stooge->next;		free (stooge);		stooge = nextStooge;		}    stoogeNumberInc ();    }/******************************************************************************** stoogeListSize - find out the size of the stoogeList.** RETURNS: the size of the linked list.*/int stoogeListSize    (    STOOGE_LIST stoogeList    )    {    int i=0;    STOOGE *stooge = stoogeList;    while(stooge!=NULL)		{		i++;		stooge = stooge->next;		}    return(i);    }/**************************************************************************** stoogeNumberInc - increment ye olde number, modulo ye olde 100** The increment is done within a mutual exclusion critical region* to avoid a possible race condition when more than one task executes* this program concurrently. Mutual exclusion issues will be discussed* in a later chapter.*/void stoogeNumberInc (void)    {    if (semTake (mutex, WAIT_FOREVER) != OK)	return;    if (++number == 100)	number = 0;    semGive (mutex);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -