pxsemtest.c
来自「VxWorks入门例程」· C语言 代码 · 共 106 行
C
106 行
#include "vxWorks.h"
#include "semaphore.h"
#include "fcntl.h"
void syncTask(sem_t* pSem);
int syncSemTask(char* name);
void unnameSem(void)
{
sem_t *pSem;
pSem=(sem_t*)malloc(sizeof(sem_t));
if(sem_init(pSem,0,0)==-1)
{
printf("unnameSem: sem_init failed\n");
return;
}
printf("unnameSem: spawning task...\n");
taskSpawn("tSyncTask",90,0,2000,syncTask,pSem);
printf("unnameSem: posting semaphore - synchronizing action\n");
if(sem_post(pSem)==-1)
{
printf("unnameSem: posting semaphore failed\n");
return;
}
printf("unnameSem: posting semaphore ok\n");
if(sem_destroy(pSem)==-1)
{
printf("unnameSem: sem_destroy failed\n");
return;
}
printf("unnameSem: sem_destroy ok\n");
}
void syncTask(sem_t* pSem)
{
if(sem_wait(pSem)==-1)
{
printf("syncTask: sem_wait failed\n");
return;
}
else
printf("syncTask: sem locked; doing sync'ed action...\n");
}
int nameSem(char* name)
{
sem_t* semId;
printf("nameSem: creating semaphore\n");
if((semId=sem_open(name,O_CREAT,0,0))==(sem_t*)-1)
{
printf("nameSem: sem_open failed\n");
return;
}
printf("nameSem: spawning sync task\n");
taskSpawn("tSyncSemTask",90,0,2000,syncSemTask,name);
printf("nameSem: posting semaphore - synchronizing action\n");
if(sem_post(semId)==-1)
{
printf("nameSem: sem_post failed\n");
return;
}
if(sem_close(semId)==-1)
{
printf("nameSem: sem_close failed\n");
return;
}
if(sem_unlink(name)==-1)
{
printf("nameSem: sem_unlink failed\n");
return;
}
printf("nameSem: closed and unlinked semaphore\n");
}
int syncSemTask(char* name)
{
sem_t* semId;
printf("syncSemTask: opening semphore\n");
if((semId=sem_open(name,0))==(sem_t*)-1)
{
printf("syncSemTask: sem_open failed\n");
return;
}
printf("syncSemTask: attempting to take semaphore...\n");
if(sem_wait(semId)==-1)
{
printf("syncSemTask: taking sem failed\n");
return;
}
printf("syncSemTask: has semaphore,doing sync'ed action...\n");
if(sem_close(semId)==-1)
{
printf("syncSemTask: sem_close failed\n");
return;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?