|
Один поток считает, другой - рисует - исключение
|
|||
---|---|---|---|
#18+
Ilya81К этому полю класса, в котором хранится указатель на копию коллекции, получается многопоточный доступ, но для указателя по идее должно хватить volatile, блокировки здесь вряд ли нужны. А, ну, т. е. совсем без volatile или lock такое оставлять нельзя. Я вот этого и добивался услышать - что так или иначе, а синхронизирующий костылик использоваться придётся. В моём же случае разве что OutOfMemoryException может досаждать. Но и тут, на мой вгзляд, достаточно проверять, на сколько заполнилась очередь - можно элементарно ограничить длину этого буфера. Зато в моём решении синхронизации нет вообще, как и прочих проблем многопоточности. Надо и так, и так попробовать, сравнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2014, 14:31 |
|
Один поток считает, другой - рисует - исключение
|
|||
---|---|---|---|
#18+
Я всё-таки рекомендую побольше почитать на тему многопоточных приложений, ибо lock и volatile имеют совершенно разное назначение. Оператор lock обеспечивает, что внутри соответствующего блока может находиться не более одного потока одновременно. Ключевое слово volatile этого не обеспечивает, его основное назначение - предотвратить буферизацию значения переменной в контексте одного потока, при которой один поток может не получить изменения, выполненного в другом потоке. В данном случае volatile не сильно критично, его неиспользование может привести лишь к тому, что отрисовка выполнится по устаревшим данным, т. е. проигнорируются сколько-то обновлений. Ну и ещё одним косвенным последствием неиспользования volatile в этом случае станет дополнительный расход памяти на лишнюю копию коллекции, поскольку неактуальное значение указателя в некотором потоке будет препятствовать удалению этой коллекции из памяти garbage collector'ом. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2014, 14:56 |
|
|
start [/forum/topic.php?fid=21&startmsg=38766146&tid=1441039]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 162ms |
0 / 0 |