Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Просмотр темы
 Распечатать тему
Блокировка потоков
HOMPAIN
#1 Распечатать сообщение
Опубликовано 14.07.2013 03:15:07
Старший специалист


Сообщений: 211
Зарегистрирован: 13.01.11

Достаточно давно уже с проблемой блокировки потоков при активном использовании защиты записи, чтения.

Суть проблемы.
Я сначала защищал чтение и запись к определённым данным через оператор lock(...). Но при активном использовании определённого куска (около сотни блокировок в секунду), возникало зависание. Сначала думал что проблема в коде и где-то происходит зацикливание. Однако анализ кода и просмотр потоков в отладчике не принёс результатов. Затем я решил отказаться от lock и переделал весь код на ReaderWriterLockSlim. Однако проблема повторилась. Тогда я сделал вход в блокировку через TryEnterRead(Write)Lock(5000) и поставил брейк поинт в случае неудачи. В результате оказалось, что блокировщик(переменная ReaderWriterLockSlim) свободен для блокировки. Единственное что в блокировщике показалось мне странным - это закрытый параметр owners = 2147483648(Max int вроде).

В чём может быть проблема и что можно предпринять в данном случае?
 
dampirik
#2 Распечатать сообщение
Опубликовано 14.07.2013 12:24:04
Аватар пользователя

Ветеран


Сообщений: 957
Зарегистрирован: 21.02.10

Посмотри вот это http://msdn.micro...event.aspx и поподробнее опиши, что должно быть в итоге?
Может всего то нужно это? http://msdn.micro...ntext.aspx
 
HOMPAIN
#3 Распечатать сообщение
Опубликовано 14.07.2013 18:08:27
Старший специалист


Сообщений: 211
Зарегистрирован: 13.01.11

Происходит зависание блокировщика, в следствии чего игра виснет. В итоге должно этого не быть
 
general
#4 Распечатать сообщение
Опубликовано 14.07.2013 23:33:00
Аватар пользователя

Администратор сайта


Сообщений: 3788
Зарегистрирован: 10.02.09

еще один без содержательный топик.
существует даже соответствующий термин "low context".
возможно не стоит забывать, что вы не в соц сеть пишете крик души,
а хотите получить полезный ответ.

судя по изложенному, навыков работы с потоками ноль, но для возможности подсказать опять шансов ноль. скорее всего не правильный изначальный подход.
[dreamteam-mobile]
[dtimofeev.blogspot.com][c#][XNA][blog]
 
HOMPAIN
#5 Распечатать сообщение
Опубликовано 15.07.2013 21:18:53
Старший специалист


Сообщений: 211
Зарегистрирован: 13.01.11

Попробую более подробно описать ситуацию.

Что имеется:
1) Массив байт
2) Потоки:
-поток считающий физику
-поток обрабатывающий запросы из сети
-....
3) Эти потоки читают и записывают данные в массив
4) Чтобы во время одновременной записи двумя потоками не возникало ошибок, я защищаю все операции с массивом через объект ReaderWriterLockSlim

Что получается:
1) При низкой интенсивности обращений к массиву всё работает нормально, данные читаются и пишутся правильно.
2) При высокой интенсивности работы с массивом из нескольких потоков, через неопределённое время объект ReaderWriterLockSlim ломается и при попытке получить доступ к массиву блокируется навсегда.

Вопрос:
1) Объект ReaderWriterLockSlim ломается по моей вине или просто не предназначен для данной ситуации?
2) Если по моей вине, то что может вызывать его поломку?
 
dampirik
#6 Распечатать сообщение
Опубликовано 15.07.2013 21:50:49
Аватар пользователя

Ветеран


Сообщений: 957
Зарегистрирован: 21.02.10

HOMPAIN написал:
Вопрос:
1) Объект ReaderWriterLockSlim ломается по моей вине или просто не предназначен для данной ситуации?
2) Если по моей вине, то что может вызывать его поломку?

Вот уже лучше, но как можно ответить по вашей вене или нет, если нету кода???
Судя по тому, что мы имеем msdn:
Для защиты ресурса, чтение из которого производится одновременно несколькими потоками, а запись — только одним, используется класс ReaderWriterLockSlim. Класс ReaderWriterLockSlim позволяет нескольким потокам находиться в режиме чтения, одному потоку — в режиме записи с монопольным владением блокировкой, и одному потоку с доступом на чтение находиться в обновляемом режиме чтения, откуда поток может перейти в режим записи без необходимости отказываться от доступа на чтение к ресурсу.

Как итог у вас есть два потока, которые пишут и читают одновременно из массива и чтобы он сохранял свою целостность? При этом производительность около сотни операций в секунду?
 
HOMPAIN
#7 Распечатать сообщение
Опубликовано 15.07.2013 23:55:43
Старший специалист


Сообщений: 211
Зарегистрирован: 13.01.11

Как итог у вас есть два потока, которые пишут и читают одновременно из массива и чтобы он сохранял свою целостность? При этом производительность около сотни операций в секунду?


Операций сотни из-за того что больше не нужно. Остальное время потоки занимаются другими делами не с эти массивом.

Вот уже лучше, но как можно ответить по вашей вене или нет, если нету кода???


Весь код привести сложно. Его достаточно много. Вот общие моменты.

Загрузить источник  GeSHi: C#
  1.  
  2. объект в классе с массивом
  3. public ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
  4.  
  5.  
  6. пример кода вызываемого в потоке
  7. if (!Locker.TryEnterReadLock(5000))//блокировка для чтения
  8. {
  9. //если попал сюда, значит Locker сломался
  10. Locker.EnterReadLock();
  11. }
  12. ...
  13. тут чтение массива
  14. в некоторых местах используется рекурсия для запроса других элементов отсюда
  15. ...
  16. Locker.ExitReadLock();//снятие блокировки
  17.  
  18. аналогично для записи
  19. if (!Locker.TryEnterWriteLock(5000))//блокировка для записи
  20. {
  21. //если попал сюда, значит Locker сломался
  22. Locker.EnterWriteLock();
  23. }
  24. ...
  25. тут чтение или запись в массив
  26. в некоторых местах используется рекурсия для запроса других элементов отсюда
  27. ...
  28. Locker.ExitWriteLock();//снятие блокировки
  29.  
Добавлено за 0.007 секунд, используя GeSHi 1.0.8.2

Изменил(а) HOMPAIN, 16.07.2013 00:01:32
 
general
#8 Распечатать сообщение
Опубликовано 16.07.2013 17:13:22
Аватар пользователя

Администратор сайта


Сообщений: 3788
Зарегистрирован: 10.02.09

где то происходит накладка.
возможно стоит попробовать старое доброе логирование
и отследить хронологию всех разнотипных Lock\UnLock

или изменить сам подход
[dreamteam-mobile]
[dtimofeev.blogspot.com][c#][XNA][blog]
 
Перейти на форум:
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,39 секунд 8,709,804 уникальных посетителей