Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.10.2016, 17:01
|
|||
|---|---|---|---|
Аналог SleepConditionVariableCS(). В чем ошибка? |
|||
|
#18+
Пытался откомпилировать ZeroMQ но наткнулся на проблемы запуска под XP. Они там задействовали виндовые Condition Variable. Надо переписать SleepConditionVariableCS() и WakeAllConditionVariable() Исходный код такой ( тут целиком ): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. mutex_t класс-обертка над CRITICAL_SECTION Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Переписал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Как понял SleepConditionVariableCS() атомарно разблокирует CS и виснет в в ожидании WakeAllConditionVariable() или истечения времени. По выходу опять блокирует CS. Я по сути тоже самое реализовал std::unique_lock<std::mutex> lck(mtx); блокирует мутекс при входе и освобождает при выходе, также мутекс свободен пока висит на cv.wait(). Мой код работает в ненагруженных тестах, но как только дал реальную нагрузку (1000 соединений с интенсивным обменом) - так периодически затыкается. Просто виснет и все. Подозреваю что я что-то еще не учел, только что? Еще какие-то особенности SleepConditionVariableCS() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2016, 12:58
|
|||
|---|---|---|---|
|
|||
Аналог SleepConditionVariableCS(). В чем ошибка? |
|||
|
#18+
Dima T, все локи должны захватываться в одном порядке. В твоем примере в разных порядках. При большой нагрузке может случится deadlock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2016, 16:01
|
|||
|---|---|---|---|
Аналог SleepConditionVariableCS(). В чем ошибка? |
|||
|
#18+
Спасибо за мысль. Починил. Добавил освобождение мутекса перед захватом критической секции. Так работает и не виснет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Непонятно зачем вызывать с таймаутом 0, пытался понять по исходникам - не понял в чем магия. Поэтому сделал эмуляцию (case 0) в итоге тест стал быстрее: 2.4 сек, против 4.3 сек. без эмулятора (case 0). Кстати родной код с SleepConditionVariableCS() с такой же скоростью отрабатывал - 4,3 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2018398]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 172ms |

| 0 / 0 |
