Russian Qt Forum
Ноябрь 22, 2024, 22:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 5 6 [7] 8   Вниз
  Печать  
Автор Тема: Использование QWaitCondition  (Прочитано 74662 раз)
Kosmonit
Гость
« Ответ #90 : Июль 17, 2013, 10:59 »

Это бесспорно, но вот тут есть одно подозрительное место
Код
C++ (Qt)
bufNotEmpty.wakeAll();
<--- сейчас эта нитка владеет мутексом
mutex.unlock();
 
а др нитка
Код
C++ (Qt)
bufNotEmpty.waitl(&mutex);
<--- сейчас эта нитка владеет мутексом
mutex.unlock();
 
А как мы знаем только одна нитка может владет мутексом. В каком же порядке они им овладевают? Или выходит что пробуждение случится только после того как будящий отдаст мутекс? И если будятся несколько, то понятно что порядок произволен, но может ли пробудившийся рассчитывать на то что остальные или еще спят, или уже отстрелялись и опять ждут на мутексе?

Не может такого быть!!! Докладываю как я вижу эту ситуацию!!!
Вот эта нитка точно владеет мьютексом:
Код
C++ (Qt)
bufNotEmpty.wakeAll();
<--- сейчас эта нитка владеет мутексом
mutex.unlock();
 

а другая нитка завладеет мьютексом, когда первая сделает и освободит мьтекс:
Код
C++ (Qt)
mutex.unlock();


потому что вторая его освободила точно:
Код
C++ (Qt)
bufNotEmpty.waitl(&mutex);

др. нитка:
Код
C++ (Qt)
bufNotEmpty.waitl(&mutex);
<--- сейчас эта нитка владеет мутексом
mutex.unlock();
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #91 : Июль 17, 2013, 11:16 »

Не может такого быть!!! Докладываю как я вижу эту ситуацию!!!
Вот эта нитка точно владеет мьютексом:
Хммм.... а почему "точно"? Напр wait освободит мутекс, потом опять захватит, почему здесь не так? А по-Вашему выходит что побудка как бы откладывается до тех пор пока будящий не осаободит мутекс. В это верится с трудом - он может заняться чем угодно и даже заснуть на др мутексе.

Что-то Old примолк (наверное изучает pthread_cond_signal)  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #92 : Июль 17, 2013, 11:27 »

Что-то Old примолк (наверное изучает pthread_cond_signal)  Улыбающийся
А вы думаете я буду вам все разжевывать?
Этот вопрос отличная тема для самостоятельного изучения, вот разберитесь и доложите нам "как там что".
Кстати, на форуме это уже обсуждали и ответ есть в теме, в которой вы принимали бурное участие, только как всегда ничего из нее не вынесли.
Записан
Bepec
Гость
« Ответ #93 : Июль 17, 2013, 11:46 »

Некрофилы отакэ... Вроде бы забыли тему, ан нет, опять воду в ступе толкут :/
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #94 : Июль 17, 2013, 12:44 »

А вы думаете я буду вам все разжевывать?
Этот вопрос отличная тема для самостоятельного изучения, вот разберитесь и доложите нам "как там что".
Кстати, на форуме это уже обсуждали и ответ есть в теме, в которой вы принимали бурное участие, только как всегда ничего из нее не вынесли.
"Разбирайся сам" - ответ на абсолютно любой вопрос. А значит и ценность такого ответа нулевая.

И почему Вы думаете что тот ответ верный? Он по существу повторяет последний пост Kosmonit, и, на мой взгляд, расходится со здравым смыслом. Да, и нехорошо пытаться задеть собеседника только потому что ответ Вам неизвестен  Улыбающийся

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #95 : Июль 17, 2013, 12:51 »

"Разбирайся сам" - ответ на абсолютно любой вопрос. А значит и ценность такого ответа нулевая.
Ответ на вопрос ничего не дает, знания даются при самостоятельном изучении предмета. Поэтому, вы никогда не узнаете ответ на этот вопрос.

расходится со здравым смыслом.
"Ваш здравый смысл" часто расходиться со здравым смыслом. Форум уже не обращает на это внимание. Улыбающийся

Да, и нехорошо пытаться задеть собеседника только потому что ответ Вам неизвестен  Улыбающийся
Вот именно. Поэтому, перечитайте свой пост, на который я отвечал и скажите это себе. Улыбающийся
Записан
Kosmonit
Гость
« Ответ #96 : Июль 17, 2013, 13:02 »

А по-Вашему выходит что побудка как бы откладывается до тех пор пока будящий не осаободит мутекс.
Я таки думаю что так, хренушки он опять захватит, пока мьютекс занят, а как освободит так и пробудится....
Записан
Kosmonit
Гость
« Ответ #97 : Июль 17, 2013, 13:04 »

Надо будет попробовать смоделировать эту ситуевину!
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #98 : Июль 17, 2013, 13:27 »

Надо будет попробовать смоделировать эту ситуевину!
Отладочный вывод после каждой нужной строки и посмотреть на результат. Подмигивающий
« Последнее редактирование: Июль 17, 2013, 13:29 от Old » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #99 : Июль 17, 2013, 13:40 »

Ответ на вопрос ничего не дает,
Мне остается только игнорировать такой малосодержательный флуд ...

По существу - да, wake не имеет эффекта пока мутекс не освобожден - никто не проснется. Первый пробудившийся захватывает мутекс, остальные еще сидят в wait.  Когда этот первый освободит мутекс - следующий выйдет из wait и.т.д
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #100 : Июль 17, 2013, 13:58 »

По существу wake это взвод флажочка. Ну это если совсем по существу. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #101 : Июль 17, 2013, 14:14 »

Хорошо, а вот такой квешн: все рекомендуют использовать wake при захваченном мутексе. Мотивировка типа: без захвата не запрещено, но смысла не имеет. Почему не имеет? Не понимаю куда смысл пропал?  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #102 : Июль 17, 2013, 14:16 »

Хорошо, а вот такой квешн: все рекомендуют использовать wake при захваченном мутексе. Мотивировка типа: без захвата не запрещено, но смысла не имеет. Почему не имеет? Не понимаю куда смысл пропал?  Улыбающийся
Все это кто?
Записан
Kosmonit
Гость
« Ответ #103 : Июль 18, 2013, 08:26 »

Хорошо, а вот такой квешн: все рекомендуют использовать wake при захваченном мутексе. Мотивировка типа: без захвата не запрещено, но смысла не имеет. Почему не имеет? Не понимаю куда смысл пропал?  Улыбающийся

Я таки думаю что бы не было такой ситуации, которую Вы описали:
Код:
bufNotEmpty.wakeAll();		
 <--- сейчас эта нитка владеет мутексом
mutex.unlock();
   
         
др. нитка:
Код:
bufNotEmpty.waitl(&mutex);		
 <--- сейчас эта нитка владеет мутексом
mutex.unlock();
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #104 : Июль 18, 2013, 08:52 »

Я таки думаю что бы не было такой ситуации, которую Вы описали:
Такой ситуации не может быть в принципе.
wake просто устанавливает флажок, планировщик разбудит ждущую нитку, когда до нее дойдет очередь.
Нитка проснется в wait, который попытается сделать мьютексу lock, а если этот мьютекс будет занят кем-то другим, то нитка опять уснет, только на этом мьютексе и проснется, когда он освободится.
Записан
Страниц: 1 ... 5 6 [7] 8   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.362 секунд. Запросов: 22.