Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Через какое время будет заблокирован мьютекс? / 25 сообщений из 40, страница 1 из 2
07.06.2021, 20:28
    #40076227
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Через какое время будет заблокирован мьютекс?
Интересный вопрос мне тут задали.

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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