Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.156.46] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
он не должен ждать, а должен был обработать последний пакет.
|
Сообщ.
#17
,
|
|
|
Цитата rastoman @ Проблема в том, что поток чего-то ждет на wait, хотя на самом деле в очереди есть один пакет! Всё вышесказанное мной не имеет отношения к реальности, ибо проблема была сформулирована двусмысленно. Реально никакого дедлока таки и нет. А я тут уже проявил чудеса кодоанализа Добавлено Цитата rastoman @ ты, кстати, не правильно понял проблему!! у человека не дед-лок, а один не обработанный пакет в очереди зависает!!! Ты был прав, извините за отсебятину |
Сообщ.
#18
,
|
|
|
я считаю что рабочий поток стоит на вейте, потому что wakeAll был вызован до того, как рабочий поток встал не этом wait.
|
Сообщ.
#19
,
|
|
|
Цитата sploid @ я считаю что рабочий поток стоит на вейте, потому что wakeAll был вызован до того, как рабочий поток встал не этом wait. Согласен. +1 Добавлено Прдлагаю вместо m_Condition.wait(&m_Mutex); написать m_Condition.wait(&m_Mutex, 200); Кривенько, но лучше чем Sleep(1) и спасёт с задержкой в 200 мс |
Сообщ.
#20
,
|
|
|
rastoman
это самое простое и нормальное решение кажись из заданной проблемы. |
Сообщ.
#21
,
|
|
|
Надо исп. дополнительную bool переменную, это предотвратит зависание данных в буфере,
когда wake() в потоке Producer был вызван до того, как поток Consumer перешел в режим ожидания: bool notified = false; // Consumer mutex.lock(); if(notified) { notified = false; } else { waitCondition.wait(&mutex); } mutex.unlock(); // Producer mutex.lock(); notified = true; mutex.unlock(); waitCondition.wakeOne(); |