В приложении C # предположим, что у меня есть один глобальный класс, который содержит некоторые элементы конфигурации, например:
public class Options
{
int myConfigInt;
string myConfigString;
..etc.
}
static Options GlobalOptions;
члены этого класса будут использоваться в разных потоках:
Thread1: GlobalOptions.myConfigString = blah;
пока
Thread2: string thingie = GlobalOptions.myConfigString;
Использование блокировки для доступа к объекту GlobalOptions также приведет к ненужному блокированию, когда 2 потока обращаются к разным элементам, но, с другой стороны, создание объекта синхронизации для каждого элемента также кажется чрезмерным.
Кроме того, использование блокировки глобальных опций сделало бы мой код менее приятным;
если я должен написать
string stringiwanttouse;
lock(GlobalOptions)
{
stringiwanttouse = GlobalOptions.myConfigString;
}
везде (и является ли этот потокобезопасным или теперь stringiwanttouse просто указателем на myConfigString? Да, я новичок в C # ....) вместо
string stringiwanttouse = GlobalOptions.myConfigString;
код выглядит ужасно.
Итак ...
Какой самый лучший (и самый простой!) Способ обеспечить безопасность потоков?