プロが教えるわが家の防犯対策術!

こんにちは。今、マルチスレッドのプログラミングをする上で困っていることがあります。
pthread(スレッド)の優先順位をどのように変更するのかがわかりません。
また、メインの優先順位も変更したいのですがよくわかりません。

現在、↓のようにやっていますが、変更されていないような気がします。
間違っているようであればご指摘やアドバイスをいただけるとうれしいです。
宜しくお願いします。

-------------------------
int main(){

int policy;
pthread_t th;
pthread_attr_t th_att;
struct sched_param scp;

/* pthread の優先順位の変更 */
scp.sched_priority = 50; /* この値は適当です…*/
policy = SCHED_FIFO;
pthread_attr_init(&th_att);
pthread_attr_setschedpolicy(&th_att,policy,&scp)

/* mainの優先順位の変更*/
scp.sched_priority = 30; /* この値は適当です…*/
pthread_setschedparam(pthread_self(),policy,&scp)

pthread_create(&th,&th_att,(void*)func,NULL);
.
.
.

A 回答 (1件)

OSは明記した方がいいでしょう。



また、各関数には戻り値があって、エラーが起きているかどうか判定できる物もあるはずですから、
戻り値はプログラム上で必ず確認してください。
エラーがあるかないかで話も違ってきますし。

また、変更されていない気がしますとありますが、
どうやって確認しましたか。
これもOSによって違ってくると思いますが。

また、プライオリティ制御はOSによってはルート権限が無いとできない操作もあります。

あとは、各スレッドの内容が問題になる場合もありますし、ライブラリ等は専用のマルチスレッド用の物を使わないといけない場合もあります。


ということで、現状ではよくわかりません(^^;
これでも良く見るとわかるかも知れませんが、
補足が来てから考えます。

この回答への補足

ご返答有難うございます。説明不足で申し訳ありませんでした。
おかげ様でrootの権限で行うと出来るということがわかりました。

OSはRedHatLinux7.1Jです。現在はrootでは無いところで実行してました。
プログラムは、通信を行うもので、メインのスレッドでは受信処理、
別スレッドでは、インターバルタイマによるタイマの測定を行っており、タイムアップ通知をメインスレッドにsocketにて通知するというものです。
処理の高速化をはかるために優先度としては、
タイマを優先し、メインも優先度を上げたい状況でした。

確認は、setschedparamによる優先度設定の前と後でgetshcedparamを
行い、値をチェックするという方法でやっていました。すべての戻り値は0で、成功と表示されてました。
私が値が変わっていないを言ったのは、どうやらgetchedparamの戻り値を見ていたようでした…。
大変早とちりしてしまって申し訳ありません。

どうも有難うございました。

補足日時:2002/08/06 08:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!