0

次の状況を考慮します。

2 つのスレッド。1 つは不確定な時間がかかるデータを初期化する必要があり、もう 1 つのスレッドはそれを待つ必要があります。

私が抱えている問題:

  • 生成プロセスを制御できないため、2 つのスレッドのいずれかが実行される前は何もできません (C コードはスクリプトのような方法でコンパイルおよび実行されます)。
  • 初期化スレッドが他のスレッドの前にコード内の任意のポイントに到達するかどうかはわかりません。それらは互いに直後に開始され、その 1 つの実行順序から私の観点からは不確定になります。
  • メイン スレッドの init 部分が最初に実行されることを確認する必要があります (たとえば、他のスレッドは初期化されていないものを使用しないようにする必要があります)。
  • この同期に使用するものはすべて、後でクリーンアップしたいと考えています。これは、実行時間の長いプロセスで 1 回限りのことであり、メモリ カウントが非常にわずかに節約されます。たとえば、ミューテックス/セマフォは後で破棄する必要があります。

どうすればこれを達成できますか?

編集:おそらくそれほど重要ではないことですが、(残念ながら)最初の質問から省略しました:すべてのスレッドからアクセスでき、開始時にNULLにする必要があるいくつかのポインターにアクセスできるため、これはおそらく同期に役立つはずです。

編集2:実験を通じて、「他のスレッド」が実際には常に生成され、関数が呼び出され、メインスレッドが開始する前に戻る必要があることがわかりました。残念ながら、その時点でメインスレッドが作業を完了するまで待たなければならないため、このすべてが不可能になります。したがって、問題はこれから理論的に検討することができます(そして、ソフトウェアのプロバイダーが変更するか、これが機能する方法を提供するとすぐに、再び実用的になることを願っています)。

g-wan (c スクリプトをサーブレット/ハンドラー/メンテナンス スクリプトとして実行する Web サーバー) タグも追加しました。 「理由」と状況。私の場合の「メイン」スレッドはメンテナンス スクリプトで、「その他のスレッド」は接続ハンドラです。


私の問題は、ソフトウェア ベンダーからのサポート/ヘルプによって「解決」されたので、この時点で pthread_cond_wait の回答を受け入れます。

4

2 に答える 2

0

1. をother thread親スレッドとして使用し、それを使用forkして を作成することができinit threadます。親は を使用waitまたはwaitpid待機しinit threadます。

2. スレッドが 2 つしかない場合は、使用できます。終了signal後のように、他のスレッド ブロック自体をしばらくinit thread送信signal し、シグナルを待機します。シグナルを受信すると、クリーン ジョブを実行します。

于 2013-08-08T15:10:48.930 に答える