1

静的 int 変数を (フラグとして) 宣言し、それを init() で -1 に初期化する C コードに問題があります。これは一度だけ呼び出され、値を 0 に更新しようとすると、または1 後で、-1 に戻り続けます。

問題が何であるかを知っている人はいますか?

同じ識別子を持つローカル変数がないため、本当に迷っています。

ありがとう!

static int previousState;

void init()
{
   previousState = -1;
}

void moveForward(int currentState)
{
    if (previousState == -1)
        previousState = currentState;

    if (previousState != currentState)
    {
        /* do stuff */
        /* PROBLEM: it never goes into here, because previousState is always -1! */
    }

    /* other code */
}

void main()
{
   init();

   if (fork() == 0)
   {
        /* do stuff */
        moveForward(1);
        exit();
   }

   /* more forks */

   moveForward(0);
   exit();
}
4

1 に答える 1

3

各プロセスは moveForward を一度だけ呼び出します。プロセスは静的データを共有しません!

スレッドを使用するか、共有メモリを使用してください。また、共有データの同時アクセスにはミューテックスまたはセマフォを使用します。できれば、並列処理により適した言語に切り替えてください...

于 2012-10-29T17:34:44.723 に答える