2012-04-28 4 views
2

スケジューラロジックをバイパスして、カーネルが別のスレッドに直ちにコンテキストスイッチを実行するようアドバイスすることはできますか?Linux上のユーザーランドからコンテキストスイッチを強制する?

例えば、cloneというスレッド/プロセスを作成した直後に、すぐに実行を開始したい場合は、カーネルが次回の再スケジュールを待つのではなく、すぐに現在のコンテキストを放棄します。

理想的には、Machカーネルのthread_switchコールと同じものを探しています。

+2

実際には、スレッドを今すぐ実行する必要がない場合は、リアルタイム優先度を与えて、カーネルに処理させる必要があります。 (しかしあなたはおそらく...あなたがなぜこれを望んでいるのか言うことはできませんか?) – andersoj

答えて

1

コンテキストスイッチを制御しようとするべきではありません。なぜなら、カーネルはいつ行うよりもはるかに優れているからです。特に、コンテキストスイッチはコストのかかる操作(キャッシュの無効化によるもの)が主な理由です。

しかし、実際にスケジューラサイクルを強制する必要がある場合は、the sched_yield() system callを使用できます。

+3

'sched_yield'は現在のスレッドをCPUから強制的に強制し、次のスレッドの実行はOPが実行したいスレッドであることを保証しません。 – Job

+0

@Job、私はあなたの声明に同意しますが、プロセスOPの開発中のメインプロセスがそのコンピュータ上で実行されている場合、他のスレッドに切り替えることはまずありません... –

+0

pthreadライブラリを使用している場合、 'pthread_yield()'関数も(これはLinux上で 'sched_yield()を呼び出します)。 –

関連する問題