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 に答える