Мне нужно разделить значение между потоками, не превзойдя его. Статическая переменная делает это?
Являются статическими классами, разделяемыми между различными потоками в С#
Ответ 1
Статические переменные распределяются между несколькими потоками в AppDomain. Все потоки будут видеть и действовать в том же экземпляре статической переменной. Таким образом, если вы используете статический, вы, скорее всего, захотите использовать некоторую форму синхронизации для защиты доступа к этой переменной.
Если вы хотите иметь локальную переменную потока, класс ThreadLocal<T>
делает это проще. Он предоставляет средства для генерации и использования уникальных данных для каждого потока.
Ответ 2
Вы хотите, чтобы переменная была поточно-локальной?
Вы можете использовать атрибут [ThreadStatic]
или ThreadLocal<T>
из .NET 4.
Лично я бы предпочел ThreadLocal<T>
, если вы используете .NET 4, но лучше все же было бы избежать такого рода контекста, если сможете. Вы можете инкапсулировать информацию в экземпляр, который используется для запуска потока, например?
Ответ 3
Вы украшаете его с помощью ThreadStaticAttribute
, чтобы сделать статическую переменную общим для всего потока, в который она инициализирована.
Статические переменные по умолчанию относятся ко всем потокам в AppDomain.
Ответ 4
Да, примените ThreadStaticAttribute
Ответ 5
Да. Однако вам нужно следить за синхронизацией.