比较简单,直接看源码片段:
//----- 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); // 发送二进制信号 } }
执行效果:
如果不加锁的话,值是错乱的,不是我们想要打印的值!!