| 日本−日本語 |
|
|
|
![]() |
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > ppthread_mutexattr_getspin_np(3T)pthread ライブラリHP-UX 11i Version 2: September 2004 |
|
名称pthread_mutexattr_getspin_np(), pthread_mutexattr_setspin_np(), pthread_mutex_getyieldfreq_np(), pthread_mutex_setyieldfreq_np(), pthread_mutexattr_disable_handoff_np(), pthread_mutex_disable_handoff_np() ― mutex の spin 属性および yield frequency 属性の取得/設定、特定の mutex またはプロセスワイドの mutex のハンドオフモード無効化 構文#include <pthread.h> パラメータ
説明これらの属性を使用すると、マルチプロセッサシステム上でアプリケーションのパフォーマンスを最大にするために、mutex ロックの動作を調整することができます。 pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np() および pthread_mutexattr_disable_handoff_np() 関数の場合、これらの関数を呼び出す前に、関数 pthread_mutexattr_init() によって属性オブジェクト attr をあらかじめ初期化しておかなければなりません。 属性: spinmutex は、mutex ロックが占有待ち状態の場合、 pthread_mutex_lock() が処理を繰り返すために使用するスピン値によって初期化することができます。 これは、マチルプロセッサシステムの場合だけ有効です。単一プロセッサシステムでは、無視されます。 バインドされたスレッドの場合、ビジー状態の mutex をブロックする手続きには、非常に負担がかかります。マルチプロセッサシステムでは、mutex を設定しているスレッドは、少ない回数の命令サイクルで mutex を解放することができます。実際にブロックを行う前に短時間の占有待ち状態を作ることによって、ロックパスはこのような状況での大量のオーバーヘッドを避けることができます。 多くのアプリケーションの場合、このような状況はまれではありません。短いコード列 (たとえば、カウンターを増加させる) を保護するために使用される mutex について考えてみましょう。この場合の mutex は、少ない回数の命令サイクル (pthread_mutex_unlock() 関数の呼び出しのためのオーバーヘッドを加えて) で設定されます。 spin 属性を設定できると、アプリケーションの作成者は、各 mutex によって保護される、重要なコードの実行時間に合わせて、占有待ち状態を調整することができます。 spin 属性の有効な値は、次のとおりです。
属性: yieldyield 属性は、mutex 単位の属性ではなく、プロセス全体にわたる属性であることに注意してください。 つまり、これはすべての mutex の動作に影響を与えます。 yield 属性は、 pthread_mutex_lock() の占有待ち状態に対して、他のスレッドが実行できるように (sched_yield() を使用して) プロセッサを解放する頻度を指定します。 スレッドの数がシステム内のプロセッサの数を超えると、mutex ロックに対する占有待ち状態が反対の影響を及ぼすことが多くあります。 占有待ち状態そのものは、ロックを設定しているスレッドに関連する重要なコードセクションの実行を妨げる可能性があります。ロックを行おうとしているスレッドは、ときどきプロセッサを解放することによって、ロックを解除できるポイントに到達するのを可能にします。それでも、この方法は mutex をブロックするという負担のかかる手続きを回避します。 yield 属性の有効な値は、次のとおりです。
戻り値pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np(), pthread_mutex_setyieldfreq_np(), pthread_mutex_getyieldfreq_np(), pthread_mutexattr_disable_handoff_np(), および pthread_mutex_disable_handoff_np() は、次の値を返します。
エラーエラーが検出されると、 pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np(), pthread_mutex_setyieldfreq_np(), および pthread_mutex_getyieldfreq_np() は、以下のエラー番号のいずれかを返します。
警告spin および yield 属性の設定値は、アプリケーションのパフォーマンスを向上させることができますが、同時に、パフォーマンスを簡単に低下させる可能性もあります。 アプリケーションによる CPU の消費量が増大する可能性があります。 小量のスレッドの場合にうまく働く設定値が、大量のスレッドの場合にはうまく働かない可能性があります。 最適な設定値は、ハードウェアおよびオペレーティングシステムの構成によって異なります。 アプリケーションそのものの小さな変更により、これらの属性を調整し直すことが必要になる場合があります。 プログラマは、パフォーマンスを注意深く分析して、アプリケーション内での mutex の競合について理解しなければなりません。 その後、さまざまな属性値を試して、mutex の競合にどのような影響があるか、応答時間、および CPU の消費量を評価します。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||