0
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吗?

4

1 回答 1

2

不,它不需要volatile。然而TaskLock (),必须施加某种内存屏障以确保操作按该顺序执行,即首先锁定,然后加载initCount。您的锁定原语可能已经这样做了。


易失性:对于多线程编程几乎没用

于 2013-02-27T03:43:42.197 回答