| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Потоки и объекты из Collections.Generic |
| Автор: imm 8.6.2009, 05:33 |
| Вопрос такой. Являются ли операции вставки/удаления из объектов классов System.Collection.Generic атомарными? Или при реализации многопоточности нужно каждую модификацию объектов обворачивать в lock? ps. Немного offtop, но нехотел создавать похожую тему рядом. Нужно ли обворачивать в lock использование переменных простых типов, например int или bool? За ранее благодарен. |
| Автор: imm 8.6.2009, 20:53 |
| Ага, понятно. А что насчет объектов классов System.Collections.Generic, являются ли их операции атомарными? |
| Автор: Bladerender 9.6.2009, 14:16 |
| Если Вы о том, можно ли делать паралельно вставку (удаление) в коллекцию елементов из разных потоков, включительно с ситуацией, что это может быть сделано одновременно, то можно. Проверял. Но я делал доступ по индексам, а не одновременно делал Адд и Ремув[счетчик-1] |
| Автор: imm 9.6.2009, 15:31 |
| Я согласен с тобой Bladerender, я тоже пробовал запускать много потоков и делать операции вставки/удаления и все было ок, но никто не гарантирует, что в дальнейшем у всех и всегда эта прога будет работать именно так. В общем хотелось бы узнать именно является ли операции стандартных коллекций атомарными или нет? |
| Автор: PashaPash 9.6.2009, 17:32 |
| imm, в общем случае - нет. для каждого класса в MSDN есть секция Thread Safety, где подробно описаны конкретные особенности. |
| Автор: Partizan 9.6.2009, 19:15 |
| imm, а в msdn на предмет thread safety инфы по классам чтоли нет? |
| Автор: imm 9.6.2009, 21:32 |
| В msdn, а в google тем более точно есть все. И если бы люди обращались вначале туды, то на этом форуме небыло бы постов. В форум люди идут за ответом на конкретный вопрос и если его получают потом иду снова и снова, таким образом живут и развиваются и становлятся интересными ресурсы. Зачем говорить, что вы знаете что это есть в msdn, если знаете помогите, вам будут очень благодарны. Зачастую у людей нет времени что бы разбираться в поставленном вопросе во всей его полноте, либо присутствуют языковые преграды. Но все равно спасибо PashaPash за ответ, он меня устроил. Спасибо за внимание. |
| Автор: PashaPash 10.6.2009, 14:59 |
| imm, MSDN есть на русском - языковые преграды - отмазка. Есть очень много вопросов, ответов на которые нет в MSDN, или есть, но не в явном виде. Вот их и надо постить на форум |
| Автор: Pankon 17.6.2009, 09:53 |
| Добиться атомарности в некоторых случаях помогает Interlocked. http://rsdn.ru/article/dotnet/CSThreading2.xml#ENUAE |