本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > p

pthread_mutexattr_getspin_np(3T)

pthread ライブラリ
HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

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> 
 
int pthread_mutexattr_setspin_np( 
pthread_mutexattr_t *attr, 
int spin 
); 
 
int pthread_mutexattr_getspin_np( 
const pthread_mutexattr_t *attr, 
int *spin 
); 
 
int pthread_mutex_setyieldfreq_np( 
int yield 
); 
 
int pthread_mutex_getyieldfreq_np( 
int *yield 
); 
 
int pthread_mutexattr_disable_handoff( 
pthread_mutexattr_t *attr 
);" 
 
int pthread_mutex_disable_handoff_np(); 

パラメータ

attr  

設定/検索の属性を持つ mutex 属性オブジェクトへのポインター。

spin  

このパラメータは、 spin 属性の新しい値を指定する (set 関数) か、または attrspin 属性を返すメモリー位置を指します (get 関数)。

yield  

このパラメータは、プロセス全体にわたる yield frequency 属性の新しい値を指定する (set 関数) か、またはプロセス全体にわたる yield frequency 属性を返すメモリー位置を指します (get 関数)。

説明

これらの属性を使用すると、マルチプロセッサシステム上でアプリケーションのパフォーマンスを最大にするために、mutex ロックの動作を調整することができます。

pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np() および pthread_mutexattr_disable_handoff_np() 関数の場合、これらの関数を呼び出す前に、関数 pthread_mutexattr_init() によって属性オブジェクト attr をあらかじめ初期化しておかなければなりません。

属性: spin

mutex は、mutex ロックが占有待ち状態の場合、 pthread_mutex_lock() が処理を繰り返すために使用するスピン値によって初期化することができます。 これは、マチルプロセッサシステムの場合だけ有効です。単一プロセッサシステムでは、無視されます。

バインドされたスレッドの場合、ビジー状態の mutex をブロックする手続きには、非常に負担がかかります。マルチプロセッサシステムでは、mutex を設定しているスレッドは、少ない回数の命令サイクルで mutex を解放することができます。実際にブロックを行う前に短時間の占有待ち状態を作ることによって、ロックパスはこのような状況での大量のオーバーヘッドを避けることができます。

多くのアプリケーションの場合、このような状況はまれではありません。短いコード列 (たとえば、カウンターを増加させる) を保護するために使用される mutex について考えてみましょう。この場合の mutex は、少ない回数の命令サイクル (pthread_mutex_unlock() 関数の呼び出しのためのオーバーヘッドを加えて) で設定されます。

spin 属性を設定できると、アプリケーションの作成者は、各 mutex によって保護される、重要なコードの実行時間に合わせて、占有待ち状態を調整することができます。

spin 属性の有効な値は、次のとおりです。

正の整数  

pthread_mutex_lock() 関数は、すぐにロックを設定できない場合、そのスレッドをブロックする前に、指定した回数の繰り返しの分だけ mutex ロック に対して占有待ち状態になります。 mutexes が、長時間かかって実行される重要なコードセクションに関連付けられている場合、 spin 値を大きく設定すると良いでしょう。

PTHREAD_MUTEX_SPINONLY_NP
  

mutex ロックのブロックを完全に禁止します。 pthread_mutex_lock() 関数は、mutex ロックを設定できるまで、占有待ち状態になります。

PTHREAD_MUTEX_SPINDEFAULT_NP
  

占有待ち状態の繰り返し回数に対して、組み込みのデフォルト値を使用します。

属性: yield

yield 属性は、mutex 単位の属性ではなく、プロセス全体にわたる属性であることに注意してください。 つまり、これはすべての mutex の動作に影響を与えます。

yield 属性は、 pthread_mutex_lock() の占有待ち状態に対して、他のスレッドが実行できるように (sched_yield() を使用して) プロセッサを解放する頻度を指定します。

スレッドの数がシステム内のプロセッサの数を超えると、mutex ロックに対する占有待ち状態が反対の影響を及ぼすことが多くあります。 占有待ち状態そのものは、ロックを設定しているスレッドに関連する重要なコードセクションの実行を妨げる可能性があります。ロックを行おうとしているスレッドは、ときどきプロセッサを解放することによって、ロックを解除できるポイントに到達するのを可能にします。それでも、この方法は mutex をブロックするという負担のかかる手続きを回避します。

yield 属性の有効な値は、次のとおりです。

正の整数  

pthread_mutex_lock() 内の占有待ち状態のループは、スピンループのそれぞれ指定された繰り返し回数 (ここで、繰り返しの合計数は mutex 単位の spin 属性によって制御されます) の後、プロセッサを解放します。

PTHREAD_MUTEX_YIELDNEVER_NP
  

mutex ロックで、プロセッサの解放を完全に禁止します。

PTHREAD_MUTEX_YIELDFREQDEFAULT_NP
  

占有待ち状態のループ内でのプロセッサの解放の頻度に対して、組み込みのデフォルト値を使用します。

リアルタイムスレッドによる mutex の取得に関して、POSIX で規定されている要件を厳密に遵守する必要がなけれは、そのシステムでは、mutex の性能を向上させることができます。 すなわち、 pthread_mutexattr_disable_handoff_np() 関数または pthread_mutex_disable_handoff_np() 関数を使えば、こうした要件の強制が厳密ではなくなるため、実際のシステムで、mutex の性能を向上させることができます。

pthread_mutexattr_disable_handoff_np() 関数を使うと、特定の mutex の性能を向上させることができます。 この関数は、mutex 属性を初期化した 後に 呼び出す必要があります。

pthread_mutex_disable_handoff_np() 関数を使うと、プロセス内のすべての mutex の性能を向上させることができます。 この関数は、他のスレッドが生成される 前に、 初期スレッドから呼び出す必要があります。

戻り値

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() は、次の値を返します。

0 

正常終了

<>0 

失敗。 返される値は、「エラー」の項に定義されているエラー番号です (errno 変数には設定されません)。

エラー

エラーが検出されると、 pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np(), pthread_mutex_setyieldfreq_np(), および pthread_mutex_getyieldfreq_np() は、以下のエラー番号のいずれかを返します。

EINVAL 

attr, spin, または yield によって指定された値が正しくない場合。

EINVAL 

プロセスがマルチスレッドになった 後に pthread_mutex_disable_handoff_np() が呼び出された場合。

警告

spin および yield 属性の設定値は、アプリケーションのパフォーマンスを向上させることができますが、同時に、パフォーマンスを簡単に低下させる可能性もあります。 アプリケーションによる CPU の消費量が増大する可能性があります。 小量のスレッドの場合にうまく働く設定値が、大量のスレッドの場合にはうまく働かない可能性があります。 最適な設定値は、ハードウェアおよびオペレーティングシステムの構成によって異なります。 アプリケーションそのものの小さな変更により、これらの属性を調整し直すことが必要になる場合があります。

プログラマは、パフォーマンスを注意深く分析して、アプリケーション内での mutex の競合について理解しなければなりません。 その後、さまざまな属性値を試して、mutex の競合にどのような影響があるか、応答時間、および CPU の消費量を評価します。

著者

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() は HP で開発されました。

標準準拠

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(): なし

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.