编写函数foo,实现“判断字符串是否为回文,若是,则函数返回1,主函数输出 YES,否则返回0,主函数中输出

编写函数foo,实现“判断字符串是否为回文,若是,则函数返回1,主函数输出 YES,否则返回0,主函数中输出,第1张

#include<stdio.h>

//如果是回文,返回1,否则返回0

int foo(const char *pch)

{

const char *pEnd=pch//pEnd指向字符串头

while(*pEnd !='\0') //将pEnd指针后移,直到字符串尾,即\0字符

pEnd++

pEnd--//回退一个,不比较字符'\0'

while(pch<pEnd)

if (*pch++ != *pEnd--) //头指针后移,尾指针前移,逐个比较,直到pch>=pend,也就是两个指针相交了,比较完了

return 0//如果有两个不等,说明不是回文,返回0

return 1

}

int main()

{

char *str1 = "abcdefgfedcba"

char *str2 = "abcdefgfedcbax"

if (1 == foo(str1))

{

printf("YES\r\n")

}

else

printf("NO\r\n")

if (1 == foo(str2))

{

printf("YES\r\n")

}

else

printf("NO\r\n")

return 0

}

同时使用多个内核对象

uC/OS-III 只允许同时等待多个信号量和消息队列,不能同时等待多个事件标志组或mutex。

这里写图片描述

任务接收到一个信号量或消息,就会进入就绪。任务通过调用OSPendMulti()等待多个对象。

/*1.定义OS_PEND_DATA数组*/

OS_OBJ_QTY index

OS_PEND_DATA pend_multi_tbl[CORE_OBJ_NUM]//定义数组

/*2.放入消息队列或者信号量*/

pend_multi_tbl[0].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem1

pend_multi_tbl[1].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem2

pend_multi_tbl[2].PendObjPtr=(OS_PEND_OBJ*)&Test_Q

/*3.等待多个内核,返回准备好,停止或者删除的内核对象数量*/

index=OSPendMulti((OS_PEND_DATA*)pend_multi_tbl,//内核对象数组

(OS_OBJ_QTY)CORE_OBJ_NUM, //内核数量

(OS_TICK)0,

(OS_OPT)OS_OPT_PEND_BLOCKING,

(OS_ERR*)&err)

有1个等待进程。

一般到0就在也获取不到信号量,只有其它线程释放了信号量.其它才能继续竞争。对一个共享资源(互相排斥)访问的控制;表示一个事件的发生;让两个任务同步。

信号量:shared_resource_sem用于对一个共享资源(相互排斥)访问的控制;而信号量key_down_sem则表示一个事件的发生。如果一个信号量的值大于0,则可以使用。如果信号量的值为0,则对该信号量的Pend操作将被放置在等待列表中。

扩展资料:

每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类PASCAL语言表述)

semaphore = record

value: integer

queue: ^PCB

end

其中PCB是进程控制块,是操作系统为每个进程建立的数据结构。

s.value>=0时,s.queue为空;

s.value<0时,s.value的绝对值为s.queue中等待进程的个数;

参考资料来源:百度百科-信号量


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/225263.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存