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 + -
显示快捷键?