powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Через какое время будет заблокирован мьютекс?
25 сообщений из 40, страница 1 из 2
Через какое время будет заблокирован мьютекс?
    #40076227
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный вопрос мне тут задали.

Поток 1 захватил мьютекс, потом поток 2 пытается захватить этот мьютекс и поток 2 блокируется.
Потом поток 1 отпускает мьютекс. Вопрос: через какое время мьютекс будет захвачен потоком 2?
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076228
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вопрос: через какое время мьютекс будет захвачен потоком 2?


IMHO, общий ответ - неизвестно и ос-специфично. Мьютекс задействует планировщик, поэтому вопрос связан с тем, когда поток получит квант времени, а это, теоретически, может и вообще никогда не случиться.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076230
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вопрос: через какое время мьютекс будет захвачен потоком 2?


С другой стороны, можно сказать и 0: если есть ожидающий поток, то мутекс и не разблокируется...
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076244
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064,

Я, в общем, согласен с обоими вашими утверждениями. Но…

1. Вопрос задавался именно с намёком, что какие-то гарантии по времени существуют. Но кто и когда такие гарантии давал совершенно не понятно.

2. В чём смысл такого вопроса с точки зрения разработки многопоточных программ? Ведь поток 2 не может знать висел ли он на ожидании мьютекса или нет.

По итогу, этот вопрос больше похож на знание внутренней работы ядра Линукса в той или иной версии.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076251
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

Если оба потока на одном ядре - то второй поток получит управление на следующем кванте планировщика и затратит на блокировку мьютекса несколько тактов процессора, т.к. будет работать с локальным кэшем.
Если потоки на разных ядрах, то в лучшем случае (если ожидающий поток еще не остановлен, а крутится в спинлоке) время будет равно времени инвалидации кэша + время загрузки кэшлинии из памяти в кэш.
В худшем случае, когда поток уже остановлен, нужно добавить еще квант планировщика.
В абсолютных числах это от сотен наносек до нескольких миллисек.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076262
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос станет еще более интересным если потоков будет не 2 а 3. И тогда можно обсудить, будет
ли время ожидания "справедливым" для каждого ждущего потока.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076272
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Если оба потока на одном ядре - то второй поток получит управление на следующем кванте планировщика
Нет. Это возможно, но не обязательно.
Если на машине в это время висит еще один процесс с более высоким приоритетом, то он может вполне вклиниться между двумя потоками желающими одного мьютекса. И насколько это "вклинивание" растянется предсказать нельзя.

Anatoly Moskovsky
В худшем случае, когда поток уже остановлен, нужно добавить еще квант планировщика.
В абсолютных числах это от сотен наносек до нескольких миллисек.
Я бы сказал: "в лучшем случае, только один квант планировщика будет между освобождением и повторных захватом".
Да и по времени надо бы увеличить - "от сотен наносекунд, до нескольких секунд". А если у машины кончилась память и ОС начала свапить, то и минуты могут набежать...
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076276
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
1. Вопрос задавался именно с намёком, что какие-то гарантии по времени существуют. Но кто и когда такие гарантии давал совершенно не понятно.

Линукс, как и виндавс, ОС с вытесняющей многозадачностью, поэтому нет никаких гарантий по времени. Как только ОС сможет - так сразу начнет выполнять тот поток.

petrav
По итогу, этот вопрос больше похож на знание внутренней работы ядра Линукса в той или иной версии.

Гугли квант времени линукс
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076285
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Нужно уточнять ваш вопрос - с какой точностью интересует время?
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076301
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Если на машине в это время висит еще один процесс

В условии нет никаких других процессов и потоков.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076331
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
White Owl
Если на машине в это время висит еще один процесс

В условии нет никаких других процессов и потоков.
) +1
Вопрос сродни вопросу, сколько времени между нажатии на тормоз педали и начале торможения колес))
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076335
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
petrav
1. Вопрос задавался именно с намёком, что какие-то гарантии по времени существуют. Но кто и когда такие гарантии давал совершенно не понятно.

Линукс, как и виндавс, ОС с вытесняющей многозадачностью, поэтому нет никаких гарантий по времени. Как только ОС сможет - так сразу начнет выполнять тот поток.

petrav
По итогу, этот вопрос больше похож на знание внутренней работы ядра Линукса в той или иной версии.

Гугли квант времени линукс

Мне кажется тут большинство всё же не правильно понимает вопрос. Почти все говорят про получение потоком кванта времени, вот он просыпается (поток), захватывает мьютекс и начинает работать.

А правильный ответ: мьютекс будет захвачен "мгновенно". Просто функция разблокировки мьютекса в данном случае не будет его разблокировать, а просто "передаст" на "содержание" второму потоку. Второй поток захватит мьютекс до того как начнёт работать. Об этом и писал x1ca4064 . А уж когда второму потоку будет выделен квант времени — это вопрос десятый.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076338
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Мне кажется тут большинство всё же не правильно понимает вопрос. Почти все говорят про получение потоком кванта времени, вот он просыпается (поток), захватывает мьютекс и начинает работать.

А правильный ответ: мьютекс будет захвачен "мгновенно". Просто функция разблокировки мьютекса в данном случае не будет его разблокировать, а просто "передаст" на "содержание" второму потоку. Второй поток захватит мьютекс до того как начнёт работать. Об этом и писал x1ca4064 . А уж когда второму потоку будет выделен квант времени — это вопрос десятый.

Если чмтать буквально, то ответ правильный: после освобождения мьютекса ожидающий поток сразу ставится в очередь на получение своего кванта времени.
Только какая практическая польза от этого знания?
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076339
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravА правильный ответ: мьютекс будет захвачен "мгновенно".

То есть если первый поток вызовет функцию захвата мутекса сразу после его освобождения, то
он гарантированно никогда мутекс не получит и она 100% упадёт в ожидание второго потока?
Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076341
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravА правильный ответ: мьютекс будет захвачен "мгновенно".

То есть если первый поток вызовет функцию захвата мутекса сразу после его освобождения, то
он гарантированно никогда мутекс не получит и она 100% упадёт в ожидание второго потока?
Ню-ню...

Откуда же у вас такие выводы?
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076344
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravОткуда же у вас такие выводы?

Внезапно: из Ваших же слов. Если освобождение мутекса вызывает его мгновенный захват
спящим потоком, то захват этого мутекса кем угодно ещё (включая поток его только что
освободивший) невозможно до получения спящим потоком кванта времени. Не так ли?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076346
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravОткуда же у вас такие выводы?

Внезапно: из Ваших же слов. Если освобождение мутекса вызывает его мгновенный захват
спящим потоком, то захват этого мутекса кем угодно ещё (включая поток его только что
освободивший) невозможно до получения спящим потоком кванта времени. Не так ли?..

Конечно. Но когда-то же поток 2 получит свои кванты, отработает и вызовет функцию освобождения мьютекса.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076349
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravНо когда-то же поток 2 получит свои кванты, отработает и вызовет функцию освобождения
мьютекса.

В условиях ЦПУ голодания и фонового приоритета - никогда. Отсюда вывод: в ОС, которая
работает так, как Вы описываете, группа потоков, использующих один мутекс, работает с
приоритетом наинизшего из них.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076355
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravНо когда-то же поток 2 получит свои кванты, отработает и вызовет функцию освобождения
мьютекса.

В условиях ЦПУ голодания и фонового приоритета - никогда. Отсюда вывод: в ОС, которая
работает так, как Вы описываете, группа потоков, использующих один мутекс, работает с
приоритетом наинизшего из них.

Вообще-то так и есть, если упрощённо. Это называется priority failures, если не ошибаюсь.

А в RTOS для борьбы с этим есть инверсия приоритетов.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076363
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravВообще-то так и есть, если упрощённо.

Вот именно. Хорошо, что ко второй странице это до Вас дошло. Теперь Вы способны не только
правильно ответить на вопрос собеседования, но и оценить его последствия для своего
приложения. Поздравляю с профессиональным ростом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076366
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravВообще-то так и есть, если упрощённо.

Вот именно. Хорошо, что ко второй странице это до Вас дошло. Теперь Вы способны не только
правильно ответить на вопрос собеседования, но и оценить его последствия для своего
приложения. Поздравляю с профессиональным ростом.

Что-то кажется мне, что вы заблудились.

Ну допустим мьютекс захватывается низкоприоритетным потоком 2 не мгновенно, а после получения
кванта времени. Этот поток в условиях "ЦПУ голодания и фонового приоритета" может никогда это
мьютекс и не отпустить. И все высокоприоритетные потоки зависнут на этом мьютексе.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076376
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЭтот поток в условиях "ЦПУ голодания и фонового приоритета" может никогда это
мьютекс и не отпустить.

В таких условиях этот поток мутекс никогда и не получит. Я же сказал: недостаточно знать
правильные ответы на вопросы, надо уметь оценить их последствия.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076381
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravЭтот поток в условиях "ЦПУ голодания и фонового приоритета" может никогда это
мьютекс и не отпустить.

В таких условиях этот поток мутекс никогда и не получит. Я же сказал: недостаточно знать
правильные ответы на вопросы, надо уметь оценить их последствия.

Ох, ну и ну. Если мы находимся в таких условиях, то в большинстве случаев нагрузка на ЦПУ не
равномерна. У низкоприоритетного потока всегда есть шанс захватить мьютекс. Хоть мгновенно,
хоть не мгновенно. А после этого обрушить логику работы высокоприоритетных потоков.

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

Или по другому: если фоновый поток хочет захватить мьютекс, значит это нужно для логики программы.
Значит он не должен быть фоновым в случае высокой нагрузки.

Или использовать инверсию приоритетов.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076408
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Или вот так. Допустим мгновенный захват мьютекса привёл к блокировке мьютекса фоновым потоком,
которому не выделяются кванты времени. И это разрушило нашу программу. Но как же тогда (по
условиям задачи) этот фоновый поток смог попытаться захватить мьютекс в то время когда он был
захвачен первым потоком?

И может даже мгновенный захват предпочтительнее? Ведь фоновому потоку всё же нужно работать.
Ну раз там захват мьютекса, то нужно же! А мгновенным захватом мы шанс даём. Но это опять же уже
какое-то программирование в вероятностях.
...
Рейтинг: 0 / 0
Через какое время будет заблокирован мьютекс?
    #40076440
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Dimitry Sibiryakov

пропущено...

В таких условиях этот поток мутекс никогда и не получит. Я же сказал: недостаточно знать
правильные ответы на вопросы, надо уметь оценить их последствия.

Ох, ну и ну. Если мы находимся в таких условиях, то в большинстве случаев нагрузка на ЦПУ не
равномерна. У низкоприоритетного потока всегда есть шанс захватить мьютекс. Хоть мгновенно,
хоть не мгновенно. А после этого обрушить логику работы высокоприоритетных потоков.

Я читал где-то про такой алгоритм приоритезации. Кажется во FreeBSD. Вобщем поток имеющий
низкий приоритет (голодающий) в то врема когда 100% квантов потребляют более важные потоки,
всё таки имеет гарантированный шанс получить свой квант даже в таких условиях. Это что-то вроде
защиты от зависания потока.

Вот насчет FreeBSD я не уверен сильно.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Через какое время будет заблокирован мьютекс?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]