2

私のプログラムには 2 つのスレッドと整数のグローバル変数があります。thread2 が実行を開始する前に、グローバル変数が何らかの値に初期化されているとします。両方のスレッドがその変数から読み取っています。競合状態は可能ですか?

これらの関数は、プログラムで 2 つのスレッドから同時に繰り返し実行されています。

void thread1(int iParam)
{
    if ( gi_Varable == iParam )
    //do something
}

void thread2(int iParam)
{
    if ( gi_Varable == iParam)
        //do something

}
4

4 に答える 4

3

同じデータに同時にアクセスして操作しようとすると、競合状態になります。ここでは、両方のスレッドがグローバル変数から読み取っているだけで、操作しようとしないため、競合状態はありません。

于 2013-08-23T06:23:49.477 に答える
1

2 つのスレッドはデータを取得するだけで、互いに競合することはありません。

グローバル変数がいつ設定されるかという点で、シリアライゼーションの問題がまだある可能性があります。スレッドが作成される前であれば問題ありません。

グローバル変数の場合。スレッドの作成中に変更される可能性がある場合は、グローバル変数を変更するスレッドとコードをシリアル化する必要がある場合があります。これは実際にはアプリケーションの詳細に依存します。可能性を考慮する必要があります。

これは、あるスレッドが変数を変更していて、別のスレッドが特定の値に設定されているグローバル変数に依存する新しいスレッドをディスパッチしている場合に特に当てはまります。

于 2013-08-23T07:03:09.077 に答える