2013-11-20 3 views
4

Я новичок в многопоточности и задаю вопрос об общих ресурсах. Я делаю это в C# .Net 4.5C# .Net 4.5 Переменные обмена многопотоками

У меня есть список, содержащий объект Price. Класс Price содержит 12 свойств одного типа типа datetime, а остальные - типа double.

Затем я запускаю 4 задания, которые ссылаются на этот список объектов. Ни одна из задач не изменит объект List, который они просто считывают с объекта.

Таким образом, все задачи связаны с одним и тем же объектом, но только чтение из него я прав, чтобы думать, что мне не понадобится блокировка?

+0

Вы правы, для чтения не требуется блокировка. –

+0

Возможный дубликат [Передача параметра в Task.Factory.StartNew] (http://stackoverflow.com/questions/20047046/passing-parameter-into-a-task-factory-startnew) – Liam

+0

Как и в предыдущем вопросе * Ваш лямбда будет выровнен в класс, сгенерированный компилятором. * – Liam

ответ

5

Да, чтение не изменяет ничего для этих типов (и даже большинства типов), поэтому оно безопасно.

+0

подумайте, что на это уже будет дан ответ: http://stackoverflow.com/questions/6955819/is-listt-thread-safe-forreading –

3

До тех пор, пока вы не получите update и add, идите в любую другую нить, вам не нужно добавлять блокировку. Если update или edit происходит на любом другом thread, тогда подумайте об использовании блокировки.
ReaderWriterLockSlim обеспечивает простой и эффективный способ обеспечения продвинутых замков Reader и Writer.

Кроме того, как указано в ниточного секции в documentation,

Это безопасно для выполнения нескольких операций чтения на список, но могут возникнуть проблемы, если коллекция модифицируется в то время как он был прочитан.