Режим голодания мьютекса

Автор KindRegards, 02 марта 2025, 13:12

« назад - далее »

KindRegards

Всем привет!
Помогите, пожалуйста, разобраться (не могу воспроизвести в коде)
Есть режим голодания у Мьютеска

В режиме голодания, когда одна или несколько горутин уже ждут слишком долго, мьютекс переключается на справедливое распределение – он отдает приоритет тем, кто уже давно в очереди, а не новой горутине, которая только что попыталась захватить его. Это приводит к тому, что все горутины, ожидающие в очереди, получают мьютекс примерно через одинаковый интервал времени.

Есть поле State

Поле state — это 32-битное число, в котором закодированы различные состояния мьютекса.

Бит (флаг)  Значение
mutexLocked (1 << 0)  1-й бит: мьютекс занят (заблокирован)
mutexWoken (1 << 1)  2-й бит: мьютекс разблокирован пробуждением
mutexStarving (1 << 2)  3-й бит: мьютекс в режиме голодания
mutexWaiterShift (1 << 3)  С 4-го бита: количество ожидающих горутин


И вот сколько бы я не пыталась у меня не получается "включить" поле Starving (задержки делала, количество горутин увеличивала, если вывожу по битам, то не вижу, чтобы было задействовано состояние голодания)

Горутина 0 получила мьютекс через 9.8997533s
  Состояние мьютекса: state: 00000000000000000000100101011001  locked: true, woken: false, starving: false, waiters: 299
Горутина 1 получила мьютекс через 9.9089954s
  Состояние мьютекса: state: 00000000000000000000100101010001  locked: true, woken: false, starving: false, waiters: 298
Горутина 2 получила мьютекс через 9.9180757s
  Состояние мьютекса: state: 00000000000000000000100101001001  locked: true, woken: false, starving: false, waiters: 297
Горутина 3 получила мьютекс через 9.9271391s
  Состояние мьютекса: state: 00000000000000000000100101000001  locked: true, woken: false, starving: false, waiters: 296
Горутина 4 получила мьютекс через 9.9360864s
  Состояние мьютекса: state: 00000000000000000000100100111001  locked: true, woken: false, starving: false, waiters: 295
Горутина 5 получила мьютекс через 9.9449063s
  Состояние мьютекса: state: 00000000000000000000100100110001  locked: true, woken: false, starving: false, waiters: 294
Горутина 6 получила мьютекс через 9.9542786s
  Состояние мьютекса: state: 00000000000000000000100100101001  locked: true, woken: false, starving: false, waiters: 293
Горутина 7 получила мьютекс через 9.9638123s