木子剑
生命不熄,学习不止!

比较简单,直接看源码片段:

//----- Mutexes
struct TN_Mutex mutex_1;

//----- Sem
struct TN_Sem sem_1;



   //-- 创建MUTEX
   tn_mutex_create(
          &mutex_1,
          TN_MUTEX_PROT_INHERIT, // Mutex使用优先级继承协议
          0); // 高优先级设定

   //-- 二进制信号
   tn_sem_create(
          &sem_1,
          1,// 开始
          2 // 最大
          );



//-- c task  优先级--低
void task_c_body(void *par)
{
   printf("New task c is OK!\n");
   char x = 0;

   for(;;)
   { 

      tn_mutex_lock(&mutex_1, 1);// 加锁,
      arrm[1]=200; // 公共数组
      tn_mutex_unlock(&mutex_1); // 解锁

      printf("c_arrm[1]=%d\n",arrm[1]);
      tn_task_sleep(50);

      enum TN_RCode rc = tn_sem_wait(&sem_1, 1); // 等待二进制信号
      if (rc == TN_RC_OK) printf("wait_SEM_OK,sem_1.count:%d\n",sem_1.count);

   }
}


//-- d task 待用任务 优先级--高
void task_d_body(void *par)
{
   printf("New task d is OK!\n");

   for(;;)
   {
      tn_mutex_lock(&mutex_1, 1);// 加锁,
      arrm[1]=100; // 公共数组
      tn_mutex_unlock(&mutex_1); // 解锁

      printf("d_arrm[1]=%d\n",arrm[1]);
      tn_task_sleep(50);
      
      tn_sem_signal(&sem_1); // 发送二进制信号
   }
}

 

 

执行效果:

 如果不加锁的话,值是错乱的,不是我们想要打印的值!!

posted on 2022-04-04 21:29  木子剑  阅读(194)  评论(0编辑  收藏  举报