anagram.c

来自「基于嵌入式实时开发系统Tornado 2的工具使用内部培训资料」· C语言 代码 · 共 78 行

C
78
字号
/* anagram.c - multitask string permutations demo */#include "vxWorks.h"#include "stdio.h"#include "stdlib.h"#include "string.h"#include "taskLib.h"#include "semLib.h"#include "sysLib.h"#include "wvLib.h"#define ANAGRAM_MUTEX_OPTS SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFEtypedef struct anagramBase    {    SEM_ID mutex;    char * string;    int length;    } ANAGRAM_BASE;LOCAL ANAGRAM_BASE anagram;int i = 0; /* count of number of modifications so far */STATUS anagramInit    (    char * str    )    {    /* Only create mutex if it hasn't been done yet...*/    if (anagram.mutex == NULL)        if ((anagram.mutex = semMCreate (ANAGRAM_MUTEX_OPTS))             == NULL)            return ERROR;    if (str == NULL || strlen(str) == 0)        return ERROR;    /* Save string and length atomically */    semTake (anagram.mutex, WAIT_FOREVER);    anagram.string = str;    anagram.length = strlen (str);    semGive (anagram.mutex);    printf ("\n\n");    return OK;    }void anagramIt     (    int delayTicks   /* Zero for default 1/4 second */    )    {    int i1, i2;    char temp;    if (delayTicks <= 0)	delayTicks = sysClkRateGet();    FOREVER        {        if (semTake (anagram.mutex, WAIT_FOREVER) == ERROR)            return;        i1 = rand() % anagram.length;        i2 = rand() % anagram.length;        temp = anagram.string[i1];        anagram.string[i1] = anagram.string[i2];        anagram.string[i2] = temp;	i++;        printf ("(%s) '%s'\n",taskName(0), anagram.string);        semGive (anagram.mutex);        taskDelay (delayTicks);        }    }

⌨️ 快捷键说明

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