|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
cdtyjvskyANAПростите, но с логикой у Вас слабовато. Впрочем как и у многих новичков.Не хамите. Забавно это читать именно от вас ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:10 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
skyANAСвеном, отвали, не тебе меня манерам учить.Хамство вас не красит ни разу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:17 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
skyANAskyANAпропущено... Простите, но с логикой у Вас слабовато. Впрочем как и у многих новичков. У Вас вылетает исключение "Collection was modified; enumeration operation may not execute", которое явно говорит о том, что в процессе того как поток #1 читал данные, поток #2 изменил коллекцию и #1 не может продолжить чтение. Даже если бы lock работал по Вашей логике, то чтобы от этого изменилось? Поток #1 "замрёт", пока #2 изменяет коллекцию, "отомрёт" и возникнет таже самая ситуация: "Collection was modified; enumeration operation may not execute". Вместо того, чтобы фантазировать, Вам следует прочитать комментарий от Pallaris ( 16647244 ) и заключить фрагмент кода чтения, и фрагмент кода изменения коллекции в Код: c# 1. 2. 3. 4.
Тогда поток #2 подождёт пока поток #1 прочитает коллекцию, прежде чем её изменять. Ну или наоборот: #1 подождёт пока #2 изменит коллекцию, прежде чем читать. В зависимости от того, кто первый начнёт выполнять свой кусок кода. Так ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:23 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
НемоКэп42Меня смущает то, что почему-то lock делается на объекте, а блокируется секция кода. А зачем объект-то нужен, если он сам по себе не блокируется? Воспринимайте это как эстафету. В руки передали флажок, ты бежишь, выполняешь какие то квесты (алгоритм/код), возвращаешься, передаешь флажок (объект для lock) следующему участнику. Естественно, пока участники договорились считать наличие флажка стартом для работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:24 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
Arm79НемоКэп42Меня смущает то, что почему-то lock делается на объекте, а блокируется секция кода. А зачем объект-то нужен, если он сам по себе не блокируется? Воспринимайте это как эстафету. В руки передали флажок, ты бежишь, выполняешь какие то квесты (алгоритм/код), возвращаешься, передаешь флажок (объект для lock) следующему участнику. Естественно, пока участники договорились считать наличие флажка стартом для работы. Ну, типа того. Мне тут накидали ссылок на статьи, где этот thisLock объясняется - сейчас почитаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:25 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
НемоКэп42Arm79пропущено... Воспринимайте это как эстафету. В руки передали флажок, ты бежишь, выполняешь какие то квесты (алгоритм/код), возвращаешься, передаешь флажок (объект для lock) следующему участнику. Естественно, пока участники договорились считать наличие флажка стартом для работы. Ну, типа того. Мне тут накидали ссылок на статьи, где этот thisLock объясняется - сейчас почитаю... Да что его читать. thisLock - совершенно любой объект. Главное, чтобы все участники его видели. Также для класса можно написать lock(this) Обычно для флажка используют новосозданный самый простой объект - new Object(), просто чтобы исключить внешнее влияние и взаимоблокировки (вариант с this имеет подводные камни, поэтому я его не советую, у не threadsafe-коллекции есть SyncRoot ) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:32 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
Arm79Также для класса можно написать lock(this) Но не нужно: In general, avoid locking on a public type, or instances beyond your code's control. The common constructs lock (this), lock (typeof (MyType)), and lock ("myLock") violate this guideline: lock (this) is a problem if the instance can be accessed publicly. lock (typeof (MyType)) is a problem if MyType is publicly accessible. lock("myLock") is a problem because any other code in the process using the same string, will share the same lock. Best practice is to define a private object to lock on, or a private static object variable to protect data common to all instances. http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:39 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныArm79Также для класса можно написать lock(this) Но не нужно: Спасибо, я знаю: Arm79вариант с this имеет подводные камни, поэтому я его не советую ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 11:47 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
Вообще надо по замку начинать с monitor_ov, что бы знать как леденцы устроены, ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 12:33 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
Модератор: Просьба всем успокоиться и продолжить выяснение как именно происходит блокировка (lock) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 13:35 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
НемоКэп42Ну, типа того. Мне тут накидали ссылок на статьи, где этот thisLock объясняется - сейчас почитаю... Простой пример, попробуй выполнить с локами и без локов, посмотри результат Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 13:43 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
skyANAПри помощи lock фрагмент кода помечается как критическая секция. То есть блокируется не объект, а кусок кода. Чудесато здесь. А после этой строчки у меня вобще волшебное чувство как у Алисы в стране чудес. В этом топике болше не может быть конструктива. Предлогаю вапше локи запретить как язычество. И переменные обьявлять только как волатиле. А сособо важные даже статик. Вот! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 15:29 |
|
Как именно происходит блокировка (lock)?
|
|||
---|---|---|---|
#18+
НемоКэп42где этот thisLock объясняется - сейчас почитаю... Ну разобрались? Что обьект блокировки нужен только для создания идентификатора, присвоения "имени".... Почитайте еще про мьютексы - это в принципе, то же самое, только глобальнее. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2014, 17:16 |
|
|
start [/forum/topic.php?fid=20&msg=38764508&tid=1402405]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 137ms |
0 / 0 |