今天测试程序发现有互斥信号量没有被释放的BUG,但奇怪的是线程并没有被卡,而是正常运行,这让我很奇怪于是做了测试,发现发现RTX中互斥信号量几点跟我想的不太一样的地方:
1 互斥信号量不释放的话只会阻塞其他任务运行,而不会阻塞拥有者的任务进程,即同一任务中,同一互斥信号量写多少次,都不会阻塞程序运行,比如下面的例子:
//任务1
static void task1(void const *arg)
{
setCurrentThreadName("task1");
while(1)
{
lock(m_lock);
__NOP();
value = 0;
while(value < 20)
{
value++;
LOG(1, "task 1 value %i",value);
osDelay(100);
}
// unlock(m_lock);
}
}
//任务2
static void task2(void const *arg)
{
setCurrentThreadName("task2");
while(1)
{
lock(m_lock);
__NOP();
while(value < 40)
{
value++;
LOG(1, "task 2 value %i",value);
osDelay(100);
}
value = 0;
unlock(m_lock);
}
}
void mockLockTestInit(void)
{
lockAlloc(&m_lock);
mAssert(m_lock.lock != NULL, "mutex claim fail");
osThreadCreate(osThread(task1),NULL);
osThreadCreate(osThre