我想以某种方式使用 pthread 库中的读写器锁,即作者优先于读者。我在手册页中读到
如果支持 Thread Execution Scheduling 选项,并且锁中涉及的线程正在使用调度策略 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
,我想知道为什么?