Мьютекс используется для предотвращения выполнения несколькими потоками кода, который безопасен только для одного потока одновременно.
Для этого мьютекс имеет несколько функций:
Мьютекс может обрабатывать условия гонки, связанные с несколькими потоками, пытающимися «заблокировать» мьютекс одновременно, и всегда приводит к тому, что один поток выигрывает гонку.
Любой поток, который проигрываетрасу усыпляют навсегда, пока мьютекс не будет разблокирован.Мьютекс поддерживает список этих потоков.
A передает «блокировку» одному и только одному из ожидающих потоков, когда мьютекс разблокирован потоком, который только что использовал его.,Мьютекс разбудит этот поток.
Если этот тип паттерна полезен для какой-то другой цели, продолжайте и используйте его по другой причине.
Назад к вашемувопрос.Допустим, вы защищали некоторый код от многопотокового доступа с помощью мьютекса и, скажем, 5 потоков ожидали, пока поток А выполнял код.Если поток B (не один из тех, кто ожидает, так как они постоянно спят в данный момент) разблокирует мьютекс, другой поток начнет выполнять код в то же время, что и поток A. Вероятно, это нежелательно.
Возможно, еслимы знали, что вы думаете об использовании мьютекса, потому что мы могли бы дать лучший ответ.Вы пытаетесь разблокировать мьютекс после отмены потока?Есть ли у вас код, который может обрабатывать 2 потока одновременно, но не три, и нет мьютекса, пропускающего 2 потока одновременно?