|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Интересный вопрос мне тут задали. Поток 1 захватил мьютекс, потом поток 2 пытается захватить этот мьютекс и поток 2 блокируется. Потом поток 1 отпускает мьютекс. Вопрос: через какое время мьютекс будет захвачен потоком 2? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2021, 20:28 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petrav Вопрос: через какое время мьютекс будет захвачен потоком 2? IMHO, общий ответ - неизвестно и ос-специфично. Мьютекс задействует планировщик, поэтому вопрос связан с тем, когда поток получит квант времени, а это, теоретически, может и вообще никогда не случиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2021, 20:51 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petrav Вопрос: через какое время мьютекс будет захвачен потоком 2? С другой стороны, можно сказать и 0: если есть ожидающий поток, то мутекс и не разблокируется... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2021, 21:03 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
x1ca4064, Я, в общем, согласен с обоими вашими утверждениями. Но… 1. Вопрос задавался именно с намёком, что какие-то гарантии по времени существуют. Но кто и когда такие гарантии давал совершенно не понятно. 2. В чём смысл такого вопроса с точки зрения разработки многопоточных программ? Ведь поток 2 не может знать висел ли он на ожидании мьютекса или нет. По итогу, этот вопрос больше похож на знание внутренней работы ядра Линукса в той или иной версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2021, 22:02 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petrav, Если оба потока на одном ядре - то второй поток получит управление на следующем кванте планировщика и затратит на блокировку мьютекса несколько тактов процессора, т.к. будет работать с локальным кэшем. Если потоки на разных ядрах, то в лучшем случае (если ожидающий поток еще не остановлен, а крутится в спинлоке) время будет равно времени инвалидации кэша + время загрузки кэшлинии из памяти в кэш. В худшем случае, когда поток уже остановлен, нужно добавить еще квант планировщика. В абсолютных числах это от сотен наносек до нескольких миллисек. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2021, 22:35 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Вопрос станет еще более интересным если потоков будет не 2 а 3. И тогда можно обсудить, будет ли время ожидания "справедливым" для каждого ждущего потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 00:18 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Если оба потока на одном ядре - то второй поток получит управление на следующем кванте планировщика Если на машине в это время висит еще один процесс с более высоким приоритетом, то он может вполне вклиниться между двумя потоками желающими одного мьютекса. И насколько это "вклинивание" растянется предсказать нельзя. Anatoly Moskovsky В худшем случае, когда поток уже остановлен, нужно добавить еще квант планировщика. В абсолютных числах это от сотен наносек до нескольких миллисек. Да и по времени надо бы увеличить - "от сотен наносекунд, до нескольких секунд". А если у машины кончилась память и ОС начала свапить, то и минуты могут набежать... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 05:41 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petrav 1. Вопрос задавался именно с намёком, что какие-то гарантии по времени существуют. Но кто и когда такие гарантии давал совершенно не понятно. Линукс, как и виндавс, ОС с вытесняющей многозадачностью, поэтому нет никаких гарантий по времени. Как только ОС сможет - так сразу начнет выполнять тот поток. petrav По итогу, этот вопрос больше похож на знание внутренней работы ядра Линукса в той или иной версии. Гугли квант времени линукс ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 07:30 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petrav, Нужно уточнять ваш вопрос - с какой точностью интересует время? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 09:06 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
White Owl Если на машине в это время висит еще один процесс В условии нет никаких других процессов и потоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 10:38 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky White Owl Если на машине в это время висит еще один процесс В условии нет никаких других процессов и потоков. Вопрос сродни вопросу, сколько времени между нажатии на тормоз педали и начале торможения колес)) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:07 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Dima T petrav 1. Вопрос задавался именно с намёком, что какие-то гарантии по времени существуют. Но кто и когда такие гарантии давал совершенно не понятно. Линукс, как и виндавс, ОС с вытесняющей многозадачностью, поэтому нет никаких гарантий по времени. Как только ОС сможет - так сразу начнет выполнять тот поток. petrav По итогу, этот вопрос больше похож на знание внутренней работы ядра Линукса в той или иной версии. Гугли квант времени линукс Мне кажется тут большинство всё же не правильно понимает вопрос. Почти все говорят про получение потоком кванта времени, вот он просыпается (поток), захватывает мьютекс и начинает работать. А правильный ответ: мьютекс будет захвачен "мгновенно". Просто функция разблокировки мьютекса в данном случае не будет его разблокировать, а просто "передаст" на "содержание" второму потоку. Второй поток захватит мьютекс до того как начнёт работать. Об этом и писал x1ca4064 . А уж когда второму потоку будет выделен квант времени — это вопрос десятый. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:20 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petrav Мне кажется тут большинство всё же не правильно понимает вопрос. Почти все говорят про получение потоком кванта времени, вот он просыпается (поток), захватывает мьютекс и начинает работать. А правильный ответ: мьютекс будет захвачен "мгновенно". Просто функция разблокировки мьютекса в данном случае не будет его разблокировать, а просто "передаст" на "содержание" второму потоку. Второй поток захватит мьютекс до того как начнёт работать. Об этом и писал x1ca4064 . А уж когда второму потоку будет выделен квант времени — это вопрос десятый. Если чмтать буквально, то ответ правильный: после освобождения мьютекса ожидающий поток сразу ставится в очередь на получение своего кванта времени. Только какая практическая польза от этого знания? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:26 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petravА правильный ответ: мьютекс будет захвачен "мгновенно". То есть если первый поток вызовет функцию захвата мутекса сразу после его освобождения, то он гарантированно никогда мутекс не получит и она 100% упадёт в ожидание второго потока? Ню-ню... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:30 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravА правильный ответ: мьютекс будет захвачен "мгновенно". То есть если первый поток вызовет функцию захвата мутекса сразу после его освобождения, то он гарантированно никогда мутекс не получит и она 100% упадёт в ожидание второго потока? Ню-ню... Откуда же у вас такие выводы? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:35 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petravОткуда же у вас такие выводы? Внезапно: из Ваших же слов. Если освобождение мутекса вызывает его мгновенный захват спящим потоком, то захват этого мутекса кем угодно ещё (включая поток его только что освободивший) невозможно до получения спящим потоком кванта времени. Не так ли?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:45 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravОткуда же у вас такие выводы? Внезапно: из Ваших же слов. Если освобождение мутекса вызывает его мгновенный захват спящим потоком, то захват этого мутекса кем угодно ещё (включая поток его только что освободивший) невозможно до получения спящим потоком кванта времени. Не так ли?.. Конечно. Но когда-то же поток 2 получит свои кванты, отработает и вызовет функцию освобождения мьютекса. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:48 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petravНо когда-то же поток 2 получит свои кванты, отработает и вызовет функцию освобождения мьютекса. В условиях ЦПУ голодания и фонового приоритета - никогда. Отсюда вывод: в ОС, которая работает так, как Вы описываете, группа потоков, использующих один мутекс, работает с приоритетом наинизшего из них. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 12:54 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravНо когда-то же поток 2 получит свои кванты, отработает и вызовет функцию освобождения мьютекса. В условиях ЦПУ голодания и фонового приоритета - никогда. Отсюда вывод: в ОС, которая работает так, как Вы описываете, группа потоков, использующих один мутекс, работает с приоритетом наинизшего из них. Вообще-то так и есть, если упрощённо. Это называется priority failures, если не ошибаюсь. А в RTOS для борьбы с этим есть инверсия приоритетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 13:02 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petravВообще-то так и есть, если упрощённо. Вот именно. Хорошо, что ко второй странице это до Вас дошло. Теперь Вы способны не только правильно ответить на вопрос собеседования, но и оценить его последствия для своего приложения. Поздравляю с профессиональным ростом. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 13:13 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravВообще-то так и есть, если упрощённо. Вот именно. Хорошо, что ко второй странице это до Вас дошло. Теперь Вы способны не только правильно ответить на вопрос собеседования, но и оценить его последствия для своего приложения. Поздравляю с профессиональным ростом. Что-то кажется мне, что вы заблудились. Ну допустим мьютекс захватывается низкоприоритетным потоком 2 не мгновенно, а после получения кванта времени. Этот поток в условиях "ЦПУ голодания и фонового приоритета" может никогда это мьютекс и не отпустить. И все высокоприоритетные потоки зависнут на этом мьютексе. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 13:18 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petravЭтот поток в условиях "ЦПУ голодания и фонового приоритета" может никогда это мьютекс и не отпустить. В таких условиях этот поток мутекс никогда и не получит. Я же сказал: недостаточно знать правильные ответы на вопросы, надо уметь оценить их последствия. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 13:35 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravЭтот поток в условиях "ЦПУ голодания и фонового приоритета" может никогда это мьютекс и не отпустить. В таких условиях этот поток мутекс никогда и не получит. Я же сказал: недостаточно знать правильные ответы на вопросы, надо уметь оценить их последствия. Ох, ну и ну. Если мы находимся в таких условиях, то в большинстве случаев нагрузка на ЦПУ не равномерна. У низкоприоритетного потока всегда есть шанс захватить мьютекс. Хоть мгновенно, хоть не мгновенно. А после этого обрушить логику работы высокоприоритетных потоков. То что мгновенный захват несколько повышает вероятность обрушения. Ну... может быть. Но в любом случае в таких случаях фоновый поток не должен разделять мьютексы с высокоприоритетными потоками. Или по другому: если фоновый поток хочет захватить мьютекс, значит это нужно для логики программы. Значит он не должен быть фоновым в случае высокой нагрузки. Или использовать инверсию приоритетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 13:43 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Или вот так. Допустим мгновенный захват мьютекса привёл к блокировке мьютекса фоновым потоком, которому не выделяются кванты времени. И это разрушило нашу программу. Но как же тогда (по условиям задачи) этот фоновый поток смог попытаться захватить мьютекс в то время когда он был захвачен первым потоком? И может даже мгновенный захват предпочтительнее? Ведь фоновому потоку всё же нужно работать. Ну раз там захват мьютекса, то нужно же! А мгновенным захватом мы шанс даём. Но это опять же уже какое-то программирование в вероятностях. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 14:35 |
|
Через какое время будет заблокирован мьютекс?
|
|||
---|---|---|---|
#18+
petrav Dimitry Sibiryakov пропущено... В таких условиях этот поток мутекс никогда и не получит. Я же сказал: недостаточно знать правильные ответы на вопросы, надо уметь оценить их последствия. Ох, ну и ну. Если мы находимся в таких условиях, то в большинстве случаев нагрузка на ЦПУ не равномерна. У низкоприоритетного потока всегда есть шанс захватить мьютекс. Хоть мгновенно, хоть не мгновенно. А после этого обрушить логику работы высокоприоритетных потоков. Я читал где-то про такой алгоритм приоритезации. Кажется во FreeBSD. Вобщем поток имеющий низкий приоритет (голодающий) в то врема когда 100% квантов потребляют более важные потоки, всё таки имеет гарантированный шанс получить свой квант даже в таких условиях. Это что-то вроде защиты от зависания потока. Вот насчет FreeBSD я не уверен сильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 15:23 |
|
|
start [/forum/topic.php?fid=57&fpage=3&tid=2017200]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 142ms |
0 / 0 |