同步操作将从 WeHarmony/docs 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "los_sem.h"#include "securec.h"/* 任务ID */static UINT32 g_testTaskId01;static UINT32 g_testTaskId02;/* 测试任务优先级 */#define TASK_PRIO_TEST 5/* 信号量结构体id */static UINT32 g_semId;VOID Example_SemTask1(VOID){UINT32 ret;printf("Example_SemTask1 try get sem g_semId ,timeout 10 ticks.\n");/* 定时阻塞模式申请信号量,定时时间为10ticks */ret = LOS_SemPend(g_semId, 10);/*申请到信号量*/if (ret == LOS_OK) {LOS_SemPost(g_semId);return;}/* 定时时间到,未申请到信号量 */if (ret == LOS_ERRNO_SEM_TIMEOUT) {printf("Example_SemTask1 timeout and try get sem g_semId wait forever.\n");/*永久阻塞模式申请信号量*/ret = LOS_SemPend(g_semId, LOS_WAIT_FOREVER);printf("Example_SemTask1 wait_forever and get sem g_semId .\n");if (ret == LOS_OK) {LOS_SemPost(g_semId);return;}}}VOID Example_SemTask2(VOID){UINT32 ret;printf("Example_SemTask2 try get sem g_semId wait forever.\n");/* 永久阻塞模式申请信号量 */ret = LOS_SemPend(g_semId, LOS_WAIT_FOREVER);if (ret == LOS_OK) {printf("Example_SemTask2 get sem g_semId and then delay 20ticks .\n");}/* 任务休眠20 ticks */LOS_TaskDelay(20);printf("Example_SemTask2 post sem g_semId .\n");/* 释放信号量 */LOS_SemPost(g_semId);return;}UINT32 ExampleTaskEntry(VOID){UINT32 ret;TSK_INIT_PARAM_S task1;TSK_INIT_PARAM_S task2;/* 创建信号量 */LOS_SemCreate(0,&g_semId);/* 锁任务调度 */LOS_TaskLock();/*创建任务1*/(VOID)memset_s(&task1, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S));task1.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_SemTask1;task1.pcName = "TestTsk1";task1.uwStackSize = OS_TSK_DEFAULT_STACK_SIZE;task1.usTaskPrio = TASK_PRIO_TEST;ret = LOS_TaskCreate(&g_testTaskId01, &task1);if (ret != LOS_OK) {printf("task1 create failed .\n");return LOS_NOK;}/* 创建任务2 */(VOID)memset_s(&task2, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S));task2.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_SemTask2;task2.pcName = "TestTsk2";task2.uwStackSize = OS_TSK_DEFAULT_STACK_SIZE;task2.usTaskPrio = (TASK_PRIO_TEST - 1);ret = LOS_TaskCreate(&g_testTaskId02, &task2);if (ret != LOS_OK) {printf("task2 create failed .\n");return LOS_NOK;}/* 解锁任务调度 */LOS_TaskUnlock();ret = LOS_SemPost(g_semId);/* 任务休眠40 ticks */LOS_TaskDelay(40);/* 删除信号量 */LOS_SemDelete(g_semId);/* 删除任务1 */ret = LOS_TaskDelete(g_testTaskId01);if (ret != LOS_OK) {printf("task1 delete failed .\n");return LOS_NOK;}/* 删除任务2 */ret = LOS_TaskDelete(g_testTaskId02);if (ret != LOS_OK) {printf("task2 delete failed .\n");return LOS_NOK;}return LOS_OK;}/** 编译运行得到的结果为:Example_SemTask2 try get sem g_semId wait forever.Example_SemTask1 try get sem g_semId ,timeout 10 ticks.Example_SemTask2 get sem g_semId and then delay 20ticks .Example_SemTask1 timeout and try get sem g_semId wait forever.Example_SemTask2 post sem g_semId .Example_SemTask1 wait_forever and get sem g_semId .**/
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。