2011-02-02 5 views
1

clone()を使用してスレッド作成/実行機能を実装しようとしていますが、CLONE_STOPPEDフラグを使用して子スレッドを作成する予定ですが、子スレッドにSIGCONTを送信するまで実行します。疑問は、子スレッドにSIGCONTを送信し、子プロセスが実行を再開するときに親スレッドの状態になることです。親スレッドは一時停止されますか?または実行を継続しますか?これを設定する方法は?CLONE()およびCLONE_STOPPEDフラグをLinux用に設定した場合の使用

THanks in advance!

答えて

2

親は引き続き実行可能です。実際に子供と同時に実行するか、インタリーブするかは、使用しているプロセッサコアの数とスケジューラが実行する方法を決定します。同時に実行されると仮定する必要があります。

フラグCLONE_STOPPEDフラグは廃止され、実際には最新のカーネルマージウィンドウで削除されました。代わりにスレッド同期プリミティブ(恐らくfutex()で構築されています)を使用してください。

+0

あなたの提案をどのように実装するのかが不思議です。あなたはそれにfutexを置くことができるように匿名の共有mmapedページの周りを維持する?たぶんPOSIXセマフォを使用しますか? – Karmastan

+0

私はfutex()を同じものに使うことを考えていましたが、この構造全体に渡って来ました。あなたが言っているように、私はfutexと一緒に行く必要があります.futexを使った条件変数の実装へのポインタはありますか? – notytony

+0

@Karmastan:OPは* threads *の作成について述べています。これは 'CLONE_VM'の使用を意味するので、フューテックスはどこにでも置くことができます。 'CLONE_VM'を使用していない場合は、' MAP_ANONYMOUS | MAP_SHARED'ページで十分でしょう。 – caf

関連する問題