2013-12-06 5 views
0

Мне было любопытно, как вы собираетесь устанавливать приоритеты для pthreads, используя мьютекс в C. Я хочу быть уверенным, что мои потоки получат блокировку в том порядке, в котором они должны основываться на некотором значении приоритета. Я сделал немного рытье и нашелНастройка приоритетов для pthreads с мьютексом

pthread_mutexattr_getprotocol() 

и

pthread_mutexattr_setprotocol() 

Является ли это то, что выполняет то, что я хочу сделать? Благодарю.

ответ

1

Я не вижу, где мьютексы вписываться в это - приоритет потока

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

Попробуйте те. Предполагая, что я понимаю, чего вы хотите ...

Попробуйте pthread_barrier_wait, чтобы заставить потоки ждать, пока все останутся что-то.

+0

После большего поиска я понял, что два перечисленных мной не были релевантны. И скажите, что 10 потоков пытаются захватить мьютекс. Я хотел бы, чтобы он мог передавать мьютексы в поток в порядке заданного приоритета. Это все еще то, что я хочу? – zProgrammer

+0

Это может сработать, но попытка упорядочить потоки - это грязная сделка. pthread_set_barrier_wait может быть тем, что вы ищете. Это называется барьерной синхронизацией. Учитывая ваше замешательство, я не уверен, что все, что я написал, это то, что вы хотите. Но мне это кажется. –

+0

@ Robert, нет, не совсем. В основном это означает, что поток с более низким приоритетом, содержащий мьютекс, получит наивысший приоритет для любых потоков, ожидающих мьютекс (PRIO_INHERIT); или любой поток будет работать на более высоком уровне приоритета или потолка приоритета любого мьютекса, который он проводит с помощью PRIO_PROTECT. Это в основном для избежания взаимных блокировок с приоритетными инверсиями. Ничто действительно (кроме того, что вы сами кодируете) может действительно гарантировать, что ваши «потоки получают блокировку в том порядке, в котором они должны». – Duck

Смежные вопросы