2

私はプロデューサー、コンシューマーとして機能する2つのスレッドを持っています。プロデューサースレッドには、次のコードがあります。

{
    mediaQueue->PushEvent( boost::bind(/* params are not important */) );

    return 0;
}

mediaQueueはメッセージキューであり、PushEvent()呼び出しで、処理するジョブがあることがスレッドに通知されます。コンシューマースレッドは、bindで作成されたファンクターを実行するだけです。

私にとって、コンシューマースレッドがファンクターを実行する前にプロデューサースレッドが戻ることが非常に重要です。

質問:プロデューサーがイベントをプッシュした直後で、イベントが戻る前に中断される可能性はありますか?

これまでの私の研究では、それは可能であり、ロックを実装する必要があると思いますが、これについてどう思いますか?

4

2 に答える 2

3

スケジューラーはいつでもスレッドに割り込むことができます。時間切れになったときにスレッドが何をしているかを(必然的に)知らないか、気にしません。競合状態の可能性がある場合は、はい、正しいロックを実装するために時間と労力を費やす必要があります。

あなたの場合、それは十分に簡単です。関数から戻ったら、呼び出し先関数に設定されているオブジェクトを待つだけPushEventです。

于 2012-05-04T08:48:44.833 に答える
1

はい、可能です。スレッドは、ほとんどいつでもスケジュールを解除できます。

ステートメントのreturn 0;実行時に問題が発生した場合は、何か問題があるように思われます。ファンクターの前に実行する必要があるのは本当にリターンですか、それともプロデューサースレッドが実行する他の何かですか?

于 2012-05-04T08:49:58.643 に答える