私のプログラムには、ダブルバッファ実装のバックバッファを埋めて交換するバックグラウンドスレッドが1つあります。メインスレッドはフロントバッファを使用してデータを送信します。問題は、プログラムを実行すると、メインスレッドの処理時間が平均して長くなることです。バックバッファを埋めるのは、データを処理してクライアントに送信するよりも時間のかかるプロセスであるため、逆の動作が必要です。
Linux上のCPOSIXpthreadを使用してこれを実現するにはどうすればよいですか?
私のプログラムには、ダブルバッファ実装のバックバッファを埋めて交換するバックグラウンドスレッドが1つあります。メインスレッドはフロントバッファを使用してデータを送信します。問題は、プログラムを実行すると、メインスレッドの処理時間が平均して長くなることです。バックバッファを埋めるのは、データを処理してクライアントに送信するよりも時間のかかるプロセスであるため、逆の動作が必要です。
Linux上のCPOSIXpthreadを使用してこれを実現するにはどうすればよいですか?
私の経験では、優先順位がない場合にメインスレッドがより多くのCPUを取得している場合、これは次の2つのいずれかを意味します。
あなたの期待に反して、それは実際に余分な時間を必要とします、または
おそらくロックの競合が原因で、バックグラウンドスレッドが不足しています
優先順位を変更しても、どちらも修正されません。
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_paramのsched_priorityフィールドで優先度を設定できます。
構造体を確認する必要がありますpthread_attr_t
。これは、パラメーターとしてpthread_create
関数に渡されます。スレッド属性を変更するために使用され、問題の解決に役立ちます。
それを解決できない場合は、ミューテックスを使用して、他のスレッドがバッファをスワップする前にメインスレッドがバッファにアクセスできないようにする必要があります。
を使用しpthread_setschedprio(pthread_t thread, int priority)
ます。しかし、他の場合 (setschedparam または pthread_attr_t を使用する場合) と同様に、優先順位を変更したい場合 (nice ユーティリティなど) は、プロセスを root の下で開始する必要があります。