static int initCount = 0;
int objInit(void)
{
int i;
/* Check for reentrancy */
TaskLock ();
i = initCount++;
TaskUnlock ();
if (i > 0)
{
while (!initialized)
TaskDelay (100);
return (OK);
}
......
}
变量initCount
应该被声明为volatile
吗?
答案 0 :(得分:2)
不,它不需要是volatile
。但是TaskLock ()
必须施加某种内存屏障以确保按顺序执行操作,即首先锁定,然后加载initCount
。可能你的锁定原语已经这样做了。