スレッドは、CAP_SYS_NICE
機能を持たないスケジューリングをSCHED_OTHER
にのみ設定できます。 sched(7)
から:あなたはpthread_attr_setschedpolicy()
あなたがとして実行されているか、実行しているユーザーのために、この機能を有効にしている場合を除き、それは(すべての可能性に失敗していますを使用して、ラウンドロビンスケジューリング(SCHED_RR
)へのスケジューリングポリシーを設定する際に意味
In Linux kernels before 2.6.12, only privileged (CAP_SYS_NICE)
threads can set a nonzero static priority (i.e., set a real-time
scheduling policy). The only change that an unprivileged thread can
make is to set the SCHED_OTHER policy, and this can be done only if
the effective user ID of the caller matches the real or effective
user ID of the target thread (i.e., the thread specified by pid)
whose policy is being changed.
プログラムはsysadmin/rootユーザーとしてCAP_SYS_NICE
を上書きすることができます)。
あなたはsetcap
プログラムを使用して機能を設定することができます。
$ sudo setcap cap_sys_nice=+ep ./a.out
(a.out
は、あなたのプログラムの名前であると仮定した場合)。
エラーチェックを行った場合は、このことがわかりました。すべてのpthread関数(通常はすべてのライブラリ関数)の戻り値を調べて失敗する必要があります。
あなたは完全なコードを投稿していないので、あなたが全体をm_thread
が作成される前メインスレッドが終了する可能性があるので(ユーザーが作成するスレッドでに参加し、この出口ていない場合、それは問題になる可能性がありますプロセス)。
pthread_join(m_thread, NULL);
か、メインスレッドがもはやメインでpthread_exit(NULL);
を(使用して必要とされている場合は、参加せずにメインスレッドを終了することができませんでしたが):だから、あなたが参加することをお勧めします。