xixitalk's snippet

Post Longer Than 140 Characters Tweets

Jul 9, 2016 - Comments

UINT32引起的死循环

UINT32 引起的死循环

上周出差定位一个死循环。一个函数进行一个信号量的初始化,每次进行一次业务都要调用这个函数初始化,这个函数作用是保障初始化后信号量初始化值为SEM_INIT_NUM,但因为UINT32的关系出现死循环了。代码如下:

出现问题的时候,semCount为4,而宏SEM_INIT_NUM为3,造成Count = SEM_INIT_NUM - semCount-1了,但因为CountUINT32,从而变成0xFFFFFFFF,一个极大值,造成for循环执行长时间不退出。修改方法是将CountUINT32改成SINT32。这是一个非常低级的代码错误。

其实更简单的是删除信号量,重新创建信号量,这样代码会容易读的多。

DeleteSemaphore(ptxSem);
ptxSem = CreateSemaphore(SEM_INIT_NUM);

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。