Мне было любопытно, как вы собираетесь устанавливать приоритеты для pthreads, используя мьютекс в C. Я хочу быть уверенным, что мои потоки получат блокировку в том порядке, в котором они должны основываться на некотором значении приоритета. Я сделал немного рытье и нашелНастройка приоритетов для pthreads с мьютексом
pthread_mutexattr_getprotocol()
и
pthread_mutexattr_setprotocol()
Является ли это то, что выполняет то, что я хочу сделать? Благодарю.
После большего поиска я понял, что два перечисленных мной не были релевантны. И скажите, что 10 потоков пытаются захватить мьютекс. Я хотел бы, чтобы он мог передавать мьютексы в поток в порядке заданного приоритета. Это все еще то, что я хочу? – zProgrammer
Это может сработать, но попытка упорядочить потоки - это грязная сделка. pthread_set_barrier_wait может быть тем, что вы ищете. Это называется барьерной синхронизацией. Учитывая ваше замешательство, я не уверен, что все, что я написал, это то, что вы хотите. Но мне это кажется. –
@ Robert, нет, не совсем. В основном это означает, что поток с более низким приоритетом, содержащий мьютекс, получит наивысший приоритет для любых потоков, ожидающих мьютекс (PRIO_INHERIT); или любой поток будет работать на более высоком уровне приоритета или потолка приоритета любого мьютекса, который он проводит с помощью PRIO_PROTECT. Это в основном для избежания взаимных блокировок с приоритетными инверсиями. Ничто действительно (кроме того, что вы сами кодируете) может действительно гарантировать, что ваши «потоки получают блокировку в том порядке, в котором они должны». – Duck