Получение мьютекса в зависимости от заданного приоритета в Windows - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть несколько процессов, которые должны взаимодействовать, и я хочу иметь возможность разрешить только один разговор одновременно с другим, например, если у меня есть процессы A, B, C, D. Если B хочет отправитьсообщение в A, C не может отправить сообщение, даже в D.

У меня уже есть необходимые каналы связи, и я искал объект в WinAPI для реализации исключительного поведения.

Мне также нужно было бы установить приоритет, так что, скажем, C отправляет сообщение D, и A и B хотят передать, когда C завершено, я должен быть уверен, что A всегда будет первым.

Я знаю, это звучит как ситуация, которая приведет к голоданию, и на самом деле так и будет, но я пытаюсь смоделировать реальную обстановку, которая страдает от голода (CANbus).

Есть идеи, какой предмет я мог бы использовать?

1 Ответ

0 голосов
/ 16 июня 2019

Windows, как и все другие современные ОС, будет планировать потоки в соответствии с приоритетом.Если у вас есть потоки с различным приоритетом, и все они ожидают одного и того же семафора мьютекса, поток с наивысшим приоритетом будет запущен, когда этот мьютекс станет доступным в следующий раз.

Таким образом, вы должны иметь возможность установить приоритеты потоков так, чтобы A был выше, чем B, и иметь один семафор мьютекса, который они все получают перед передачей, и освобождают после завершения.Поэтому, когда C завершит связь с D, он освободит мьютекс, и из двух готовых потоков (A и B) Windows будет планировать A раньше B. Поскольку A будет брать семафор, B станет не готовым, пока A не завершити выпустил мьютекс.

...