semc.c

来自「在TORNADO下写的基于VXWORKS的多信号量通信的源代码」· C语言 代码 · 共 60 行

C
60
字号
#include "vxWorks.h"
#include "semLib.h"

SEM_ID semC_id;

/*
	SEM_Q_FIFO (0x0)
	SEM_Q_PRIORITY (0x1)
	SEM_DELETE_SAFE (0x4) 
	SEM_INVERSION_SAFE (0x8)
	SEM_EVENTSEND_ERR_NOTIFY (0x10)
*/

#define COUNT_NUM 5
int nCount = COUNT_NUM;

void semCTask(SEM_ID semId)
{
	FOREVER
	{
		printf("[%s] task is waiting for a COUNT semaphore... -- count = %d \n",taskName(0),nCount);
		if(semTake(semId,WAIT_FOREVER)==ERROR)
        {
            printErr("semTake failed\n");
        }
        else
		{
			nCount--;
			printf("[%s] task TAKEs a semaphore!!! Doing SOMETHING...\n",taskName(0));
			taskDelay(300);
			printf("[%s] ============>>> Done!!! \n\n",taskName(0));
		}
	}
}


void testC()
{
	semC_id = semCCreate(SEM_Q_PRIORITY, COUNT_NUM);

	printf("========== Counting semphore created!\n");
	printf("semC_id = 0x%8x \n",semC_id);

	nCount = COUNT_NUM;

	taskSpawn("semCTask1",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask2",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask3",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask4",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask5",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask6",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask7",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask8",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
}

void giveC()
{
	semGive(semC_id);
	nCount++;
}

⌨️ 快捷键说明

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