Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Через какое время будет заблокирован мьютекс?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8373
petrav,
Ты столько раз написал слово фоновый поток.
Но фоновый поток ничего не блокирует. И не должен блокировать.
И с мьютексом не взаимодействует.
8 июн 21, 15:25    [22332947]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
White Owl
Member

Откуда:
Сообщений: 12739
mayton
petrav
пропущено...

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

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

Вот насчет FreeBSD я не уверен сильно.
У FreeBSD действительно была проблема что довольно легко организовать голодовку. Чаще всего это случалось с пользовательскими процессами при серьезном сетевом траффике.
В пятой версии (2003) представили новый планировщик (ULE) который должен был решить все эти проблемы, но он был по умолчанию выключен и работал стандартный планировщик. Только в 2008 (7 версия ОС) BSD планировщик был заменен на ULE "из коробки".
8 июн 21, 17:04    [22333001]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3805
petrav
Интересный вопрос мне тут задали.

Поток 1 захватил мьютекс, потом поток 2 пытается захватить этот мьютекс и поток 2 блокируется.
Потом поток 1 отпускает мьютекс. Вопрос: через какое время мьютекс будет захвачен потоком 2?
на простой вопрос - простой ответ - сразу же!
9 июн 21, 21:46    [22333541]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8373
Alex_Ustinov
petrav
Интересный вопрос мне тут задали.

Поток 1 захватил мьютекс, потом поток 2 пытается захватить этот мьютекс и поток 2 блокируется.
Потом поток 1 отпускает мьютекс. Вопрос: через какое время мьютекс будет захвачен потоком 2?
на простой вопрос - простой ответ - сразу же!
)))
10 июн 21, 09:17    [22333586]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
teo609
Member

Откуда: Рязань
Сообщений: 141
petrav
x1ca4064,

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


Бывает интересно, сколько времени поток проводит в ожидании занятого ресурса (мьютекса), насколько эффективна организация многопоточности. Для оценки простоя можно использовать минимум 2 способа. 1. мерять высокоточно время до и после получения ресурса. 2. Использовать не функцию захвата ресурса, а попытки захвата, которая вернется сразу же если он не доступен, и подсчитывать количество неудачных попыток. Другой вопрос, что можно сделать, получив эти данные, как и что оптимизировать.
10 июн 21, 10:56    [22333634]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8373
teo609,
>для ЭФФЕКТИВНОСТИ организации многопоточности в топике вообще нет никаких исходных данных.
10 июн 21, 12:16    [22333688]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51455
Кстати даже проблема которую моделирует автор - будет иметь разные имплементации на windows-threads,
linux/p_threads e.t.c. Поэтому и изучать эту проблему в разрезе С++ безмысленно. Нам придется смотреть
что-то более конкретное к ОС и железу.

Может у него - QNX/Neutrino?
10 июн 21, 12:49    [22333715]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
da17
Member

Откуда:
Сообщений: 453
Получается планировщик знает кто ожидает мьютекс и сразу же запускает ожидающий поток? Где можно про это почитать?
10 июн 21, 13:16    [22333751]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
White Owl
Member

Откуда:
Сообщений: 12739
da17
Получается планировщик знает кто ожидает мьютекс и сразу же запускает ожидающий поток? Где можно про это почитать?
Нет, планировщик не знает. Он просто переключает процессы один за другим в соответствии с приоритетами этих процессов. Потому и может получиться что между освобождением и повторным захватом мьютекса может пройти неизвестно сколько реального времени занятого процессами которым данный мьютекс не интересен.
10 июн 21, 14:38    [22333853]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53477

Но код ReleaseMutex способен поставить нового владельца в голову списка и отдать остаток
своего кванта, причём не возвращаясь в пользовательский режим.

Posted via ActualForum NNTP Server 1.5

10 июн 21, 14:42    [22333856]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
Dima T
Member

Откуда:
Сообщений: 15804
Dimitry Sibiryakov

Но код ReleaseMutex способен поставить нового владельца в голову списка и отдать остаток
своего кванта, причём не возвращаясь в пользовательский режим.

Это если оба потока на одном ядре. Если на разных ядрах, то задача становится неоднозначной - переключение потока на другое ядро далеко не бесплатная операция.
10 июн 21, 14:51    [22333862]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51455
da17
Получается планировщик знает кто ожидает мьютекс и сразу же запускает ожидающий поток? Где можно про это почитать?

Можно наверное начать читать отсюда https://en.wikipedia.org/wiki/Completely_Fair_Scheduler по Linux.

По Windows - не знаю. Но возможно Рихтер и Руссинович где-то писали об этом в своих книгах и статьях.
10 июн 21, 15:56    [22333913]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
m_Sla
Member

Откуда:
Сообщений: 2710
da17
Получается планировщик знает кто ожидает мьютекс и сразу же запускает ожидающий поток? Где можно про это почитать?
Марк Руссинович Дэвид Соломон "Внутреннее устройство Windows"
Э. Таненбаум Х. Бос "Современные операционные системы"
11 июн 21, 03:39    [22334149]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
petrav
Member

Откуда:
Сообщений: 2949
mayton
Кстати даже проблема которую моделирует автор - будет иметь разные имплементации на windows-threads,
linux/p_threads e.t.c. Поэтому и изучать эту проблему в разрезе С++ безмысленно. Нам придется смотреть
что-то более конкретное к ОС и железу.

Может у него - QNX/Neutrino?

Нет, вопрос был задан именно так как я его озвучил. И именно не в контексте какой-то ОС.

PS: * Бессмысленно.
11 июн 21, 20:09    [22334565]     Ответить | Цитировать Сообщить модератору
 Re: Через какое время будет заблокирован мьютекс?  [new]
petrav
Member

Откуда:
Сообщений: 2949
Dimitry Sibiryakov

Но код ReleaseMutex способен поставить нового владельца в голову списка и отдать остаток
своего кванта, причём не возвращаясь в пользовательский режим.

Т.е. вы хотите сказать, что эти остатки этого кванта пользовательский поток будет работать в режиме ядра?
11 июн 21, 20:14    [22334566]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / C++ Ответить