web-dev-qa-db-ja.com

C linuxpthreadスレッドの優先度

私のプログラムには、ダブルバッファ実装のバックバッファを埋めて交換するバックグラウンドスレッドが1つあります。メインスレッドはフロントバッファを使用してデータを送信します。問題は、プログラムを実行すると、メインスレッドの処理時間が平均して長くなることです。バックバッファを埋めるのは、データを処理してクライアントに送信するよりも時間がかかるプロセスなので、逆の動作が必要です。

Linux上のCPOSIX pthreadでこれをどのように達成できますか?

13
eat_a_lemon

私の経験では、優先順位がない場合、メインスレッドがより多くのCPUを取得している場合、これは次の2つのいずれかを意味します。

  1. あなたの期待に反して、実際には余分な時間が必要です、または

  2. おそらくロックの競合が原因で、バックグラウンドスレッドが不足しています

優先順位を変更しても、どちらも修正されません。

6
Alnitak

pthread_setschedparam()を見てください-> http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setschedparam.3.html

pthread_setschedparam(pthread_t thread, int policy,
                         const struct sched_param *param);

Sched_pa​​ramのsched_priorityフィールドで優先度を設定できます。

3
cordellcp3

pthread_setschedprio(pthread_t thread, int priority)を使用します。ただし、他の場合(setschedparamまたはpthread_attr_tを使用する場合)と同様に、優先順位を変更する場合(Niceユーティリティなど)は、プロセスをルートで開始する必要があります。

1
maverik

pthread_attr_t構造体を確認する必要があります。これは、パラメータとしてpthread_create関数に渡されます。スレッド属性を変更するために使用され、問題の解決に役立ちます。

それを解決できない場合は、ミューテックスを使用して、他のスレッドがバッファをスワップする前に、メインスレッドがバッファにアクセスできないようにする必要があります。

1
Opera