📄 b-sync.c
字号:
#include "Vxworks.h"
#include "taskLib.h"
#include "semLib.h"
#include "stdio.h"
#include "sysLib.h"
#define TASK_PRI 98
#define TASK_STACK_SIZE 5000
LOCAL SEM_ID semId1;
LOCAL SEM_ID semId2;
LOCAL int numTimes=3;
LOCAL BOOL notDone;
LOCAL STATUS taskA();
LOCAL STATUS taskB();
STATUS synchronizeDemo()
{
notDone=TRUE;
if((semId1=semBCreate(SEM_Q_PRIORITY, SEM_FULL))==NULL)
{
perror("synchronizeDemo: Error in creating semId1 semaphore");
return(ERROR);
}
if((semId2=semBCreate(SEM_Q_PRIORITY, SEM_EMPTY))==NULL)
{
perror("synchronizeDemo: Error in creating semId2 semaphore");
return(ERROR);
}
printf("\n\n synchronizeDemo Created successful\n");
if(taskSpawn("tTaskA", TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR) taskA, 0,0,0,0,0,0,0,0,0,0)==ERROR)
{
perror("synchronizeDemo: Error in spawning taskA");
return(ERROR);
}
if(taskSpawn("tTaskB", TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR) taskB, 0,0,0,0,0,0,0,0,0,0)==ERROR)
{
perror("synchronizeDemo: Error in spawning taskB");
return(ERROR);
}
while(notDone)
taskDelay(sysClkRateGet());
if(semDelete(semId1)==ERROR)
{
perror("syncronizeDemo: Error in deleting semId1 semaphore");
return(ERROR);
}
if(semDelete(semId2)==ERROR)
{
perror("syncronizeDemo: Error in deleting semId2 semaphore");
return(ERROR);
}
printf("\n\n synchronizeDemo now completed\n");
return(OK);
}
LOCAL STATUS taskA()
{
int count;
for(count=0;count<numTimes;count++)
{
if(semTake(semId1, WAIT_FOREVER)==ERROR)
{
perror("taskA: Error in semTake");
return(ERROR);
}
printf("taskA: Started first by taking the semId1 semaphore %d times\n",(count+1));
printf("This is task <%s>: Event A now done\n", taskName(taskIdSelf()));
if(semGive(semId2)==ERROR)
{
perror("taskA: Error in semGive");
return(ERROR);
}
}
return(OK);
}
/************************************************************
*
*
*
*/
LOCAL STATUS taskB()
{
int count;
for(count=0;count<numTimes;count++)
{
if(semTake(semId2, WAIT_FOREVER)==ERROR)
{
perror("taskB: Error in semTake");
return(ERROR);
}
printf("taskB: synchronized with taskA's release of semID2 %d times\n", (count+1));
printf("This is task <%s>:Event B now done\n", taskName(taskIdSelf()));
printf("taskB: I'm done, taskA can now proceed; Releasing semId1 semaphore\n\n\n");
if(semGive(semId1)==ERROR)
{
perror("taskB: Error in semGive");
return(ERROR);
}
printf("hello!");
}
notDone=FALSE;
return(OK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -