2009-05-04 2 views
1

Я разрабатываю некоторые неизменяемые классы, но у меня есть некоторые переменные, например, .Count, чтобы иметь общее количество экземпляров. Но будет ли статическая переменная влиять на многопоточность?Неизменяемость и статические переменные

Поскольку такие методы, как «Добавить», «Удалить» и т. Д., Должны обновить значение .Count. Может, я должен сделать это ленивой собственностью?

+0

ли каждый поток должен обращаться к одному объекту списка или может каждый поток имеет свою собственную коллекцию? В принципе, что должно быть разделено между потоками. –

+0

Нет, мне просто нужно, чтобы они увеличивали/уменьшали счетчик соответственно. –

+0

Опубликовать код? –

ответ

2

Если вы просто делаете счетчик, блокировка операций может быть вариантом, а не блокировкой. MSDN имеет nice example of this в контексте подсчета ссылок.

0

Да, всякий раз, когда вы обновляете общую переменную в многопоточной среде, вам нужно просто обернуть эти обновления в блокировку.

2

Возможно, вам стоит рассмотреть возможность использования функций класса Interlocked, по крайней мере, в примере, который вы указали.

+0

Так что на практике параллельные операции будут медленнее, верно? –

+0

Медленнее чем? – bdonlan

+0

Медленнее, чем случай, когда счет был экземпляром (не то, чтобы он работал), но теоретически. –

1

Но будет ли статическая переменная влиять на многопоточность?

уверенный! Поделимое состояние подвержено, по определению, многопоточным.

Поскольку такие методы, как «Добавить», «Удалить» и т. Д., Должны обновить значение «Значение». Может, я должен сделать это ленивой собственностью?

это лучше, используя класс, does an atomic add (как AtomicInteger в Java), чтобы избежать блокировки: take a look here

Смежные вопросы