Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79cdtyjvХахаха, так у вас еще и члены класса не волатильные. То есть вообще никаких гарантий в многопоточно окружении у вас нет. Вердикт - на помойку, СРОЧНО ! Критиковать каждый горазд, особенно старый код под .net2. Мы ждем вашего кода. С volatile в пределах заданного ТС коридора. Кстати, товарищ эксперт, если мой код исправить так, вас это устроит? Код: c# 1. 2. 3. 4. 5. 6. Зачем нам смотреть в Java, когда есть ConcurrentQueue и его исходники? Чем он так плох? он еще его не завизировал, вот чем плох он! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 10:18 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
netivanавторХахаха, так у вас еще и члены класса не волатильные. То есть вообще никаких гарантий в многопоточно окружении у вас нет. Вердикт - на помойку, СРОЧНО! напиши идеальный, оценимОн только по чужим исходникам на Java способен код на C# писать. И у него это плохо получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 10:18 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Где-то в степиmikron, по первому, в код не вникал, но наверное проверка что не залез кто то из другого потока, Вот я и спрашиваю, как эта "проверка" работает? что удержит оптимизатор от её полного удаления за ненужностю? Оптимизатор может зделать и так. Код: c# 1. 2. 3. 4. 5. Тогда очевидно, что она безполезна. Где-то в степипри беглом взгляде в сети данный код используется в около сотни проектах, наверное можно его считать верифицированным ( условно) Вот она чудотворящая сила копипасты. Иммено так количество переходит в качество. Ещё одно подверждение марксистко ленинской диалектической теории :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 10:34 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
mikron[src c#] oldTail = _tail; oldTailNext = oldTail.Next; if (_tail == oldTail) // Optimisation can remove comparission Откуда это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 10:54 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Вот , хороший пост Эрика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 10:58 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВmikron[src c#] oldTail = _tail; oldTailNext = oldTail.Next; if (_tail == oldTail) // Optimisation can remove comparission Откуда это? 16620467 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 10:58 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
netivanнапиши идеальный, оценимЗачем мне писать свой, если уже все написано? Причем написано эффективно и корректно, в отличие от вашей реализации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:28 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79Кстати, товарищ эксперт, если мой код исправить так, вас это устроит? Код: c# 1. 2. 3. 4. 5. 6. В вашем коде есть три ошибки: 1) Он не компилируется, так как в VolatileRead надо отдавать адрес переменной, а вы туда отдаете свойство, чего делать нальзя. 2) Нужен lock(queue) и в другом треде, который делает Enqueue(). Вы про это не упомянули, а значит и не подумали. 3) Если бы Thread.VolatileRead(queue.Count) все таки работал, то он не нужен был бы внутри lock(queue), хватило бы и обычного чтения. Двойка вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:32 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
mikronГде-то в степиmikron, по первому, в код не вникал, но наверное проверка что не залез кто то из другого потока, Вот я и спрашиваю, как эта "проверка" работает? что удержит оптимизатор от её полного удаления за ненужностю?Да ничего. Поля не волатильны, оптимайзер волен делать, что захочет. Но вот Arm79 считает, что это казуистика, и такой код всегда работает, а модель памяти придумали ботаны-теоретики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:34 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВ Вот , хороший пост Эрика. Бесполезное гонево ламера, причем 5-летней давности. Откровенный бред человека, который в самом начале признается в своей некомпетентности. Я бы не стал "козырять" такими позорными темами. P.S. Возможно сейчас у этого веб евангелиста мнение поменялось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:41 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
cdtyjvArm79Кстати, товарищ эксперт, если мой код исправить так, вас это устроит? Код: c# 1. 2. 3. 4. 5. 6. В вашем коде есть три ошибки: 1) Он не компилируется, так как в VolatileRead надо отдавать адрес переменной, а вы туда отдаете свойство, чего делать нальзя. 2) Нужен lock(queue) и в другом треде, который делает Enqueue(). Вы про это не упомянули, а значит и не подумали. 3) Если бы Thread.VolatileRead(queue.Count) все таки работал, то он не нужен был бы внутри lock(queue), хватило бы и обычного чтения. Двойка вам. Пичалька. Я действительно не проверял код, но касаемо 3 пункта вы неправы. Если lock объекта отнюдь не означает, что синхронизируются по всех процессорных кэшах значение всех его полей. Пункт 2 - это лишь ваши фантазии, о чем я там думал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:49 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79о касаемо 3 пункта вы неправы. Если lock объекта отнюдь не означает, что синхронизируются по всех процессорных кэшах значение всех его полей.Как раз таки означает. Если бы этого не было, то следующий код бы не работал, а он работает: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Все, я заканчиваю с вами диалог. Разберитесь сначала с моделью памяти, потом поговорим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:56 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
codearticles.ruЕвгенийВ Вот , хороший пост Эрика. Бесполезное гонево ламера, причем 5-летней давности. Откровенный бред человека, который в самом начале признается в своей некомпетентности. Я бы не стал "козырять" такими позорными темами. P.S. Возможно сейчас у этого веб евангелиста мнение поменялось. МСУ, Гайдар в принципе на такие статьи не способен, это перевод блога Эрика Липперта , который не самый последний стековерфлоу и который много лет делал .NET и С#, всякие там деревья выражений, женерики и прочие контрвариантности и чем там ты еще там пользуешься, его рук дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:58 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79lock объекта отнюдь не означает, что синхронизируются по всех процессорных кэшах значение всех его полей cdtyjvКак раз таки означает Да, действительно, тут я дал маху. cdtyjvНо вот Arm79 считает, что это казуистика, и такой код всегда работает Но тут я по прежнему на своем стою - тот код, который я привел, рабочий. Тот, а не такой. Разница есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:18 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79Но тут я по прежнему на своем стою - тот код, который я привел, рабочий. Тот, а не такой. Разница есть.Да ради бога. Разнесут вас на очередном собеседовании за такой код - может быть начнете по-другому смотреть на вещи. Код бывает либо корректный, либо нет. Ваш код некорректен, точно так же, как и код нашего коллеги, реализовавшего нерабочую конкурентную очередь. Никаких "конкретно мой" здесь нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:22 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
cdtyjvн Еще раз: 1 итерация: Читающий поток смотрит на количество. Видит 0, не исполняется ничего 2 итерация: читающий поток видит количество 2 (хотя допустим, пишущие потоки закинули туда 10 объектов, и Count не синхронизирован). Входит lock, где Count уже засинхронизирован и там уже 10, то есть Count корректен. Обрабатывает эти 10 элементов. Фактически ваша претензия сводится к тому, что объекты в очереди будут обработаны в разных итерациях, что при периодическом опросе несущественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:26 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79 , Вовсе нет. Моя претензия заключается в том, что если один поток положил элемент в очередь и изменил _count с 0 на 1, то второй поток может продолжать видеть 0 неограниченно долго . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:31 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВМСУ, Гайдар в принципе на такие статьи не способен, это перевод блога Эрика Липперта Да, я верю, что он тру кодер, но после таких слов ...За всю мою карьеру, необходимость написать код, который запускает второй рабочий поток, возникала, вероятно, менее полудюжины раз. вникать в его поток воображения стало лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:32 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
codearticles.ru...За всю мою карьеру, необходимость написать код, который запускает второй рабочий поток, возникала, вероятно, менее полудюжины раз. вникать в его поток воображения стало лень.Все правильно он написал. Так как преимущественно используют тред-пулы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:42 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
cdtyjv Arm79 , Вовсе нет. Моя претензия заключается в том, что если один поток положил элемент в очередь и изменил _count с 0 на 1, то второй поток может продолжать видеть 0 неограниченно долго . Но ведь видит же? Может, потому, что при записи в эту очередь тоже lock и там обновляются значения Count? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:42 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79Но ведь видит же? Может, потому, что при записи в эту очередь тоже lock и там обновляются значения Count?Нет гарантий, что чтение переменной вне лока увидит изменение, которое внес другой поток внутри лока. Что бы его увидеть нужен барьер памяти до чтения, которого в вашем случае нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:44 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
cdtyjvArm79Но ведь видит же? Может, потому, что при записи в эту очередь тоже lock и там обновляются значения Count?Нет гарантий, что чтение переменной вне лока увидит изменение, которое внес другой поток внутри лока. Что бы его увидеть нужен барьер памяти до чтения, которого в вашем случае нет. Так это если разовое. Если речь о периодическом опросе, то проблем не будет, Count будет прекрасно меняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:46 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Вот код, компилировал его в Release, запускал вне студии. Раз 10 запускал на 8ядерной машине, не разу не зависло. Обратите внимание, сначала запускал читающий поток, чтобы гарантированно первой итерацией не проскакивать в lock. Код: 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. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:58 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
cdtyjvВсе правильно он написал. Так как преимущественно используют тред-пулы. Причем тут это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:06 |
|
||
|
Потокобезопасное использование потоконебезопасных коллекций
|
|||
|---|---|---|---|
|
#18+
Arm79 , Код: 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. 1) Скомплиировать в Release. 2) Запустить без дебагера. Еще вопросы будут у вас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:27 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=38758707&tid=1402419]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 536ms |

| 0 / 0 |
