ライターがリーダーよりも優先されるように、pthread ライブラリの読み取り/ライター ロックを使用したかったのです。私は自分のマニュアルページを読みました
スレッド実行スケジューリング オプションがサポートされており、ロックに関与するスレッドがスケジューリング ポリシー SCHED_FIFO または SCHED_RR で実行されている場合、ライターがロックを保持している場合、またはより高い優先度または同等の優先度のライターがブロックされている場合、呼び出しスレッドはロックを取得しません。ロックで; それ以外の場合は、呼び出しスレッドがロックを取得します。
そこで、スレッド スケジューリング オプションを設定する小さな関数を書きました。
void thread_set_up(int _thread)
{
struct sched_param *_param=malloc(sizeof (struct sched_param));
int *c=malloc(sizeof(int));
*c=sched_get_priority_min(SCHED_FIFO)+1;
_param->__sched_priority=*c;
long *a=malloc(sizeof(long));
*a=syscall(SYS_gettid);
int *b=malloc(sizeof(int));
*b=SCHED_FIFO;
if (pthread_setschedparam(*a,*b,_param) == -1)
{
//depending on which thread calls this functions, few thing can happen
if (_thread == MAIN_THREAD)
client_cleanup();
else if (_thread==ACCEPT_THREAD)
{
pthread_kill(params.main_thread_id,SIGINT);
pthread_exit(NULL);
}
}
}
申し訳ありませんが、私はすべてa,b,c
を試しましたがmalloc
、それでも へSIGSEGV
の電話に出pthread_setschedparam
ます。どうしてですか?