Допустим есть список в котором что то храним.
К данному списку обращается множество потоков.
нужно заблокировать чтение(выполнение зеленого) если другой поток выполняет запись(выполняется красный метод) и восстановить работу зеленого как только красный закончит работу.
Причем чтение может выполнятся "одновременно" несколькими потоками если только не выполняется запись... по этому lock(object) ко всем методам не подходит. Чет не могу сообразить как это красиво реализовать...
Добавлено через 7 минут
Блин вот тупил часа 2, создал тему и тут же вспомнил про ManualResetEvent и все встало на свои места. Тема закрыта. А вообще самое лучше решение - ReaderWriterLock
Код:
private static OrderedDictionary<int, string> testMem = new OrderedDictionary<int, string>();
public static void [color=Red]addIntString[/color](int testInt, string testString)
{
testMem.Add(testInt, testString);
}
public static string [color=Lime]getStringByInt[/color](int testInt)
{
string testString;
testMem.TryGetValue(testInt, out testString);
return testString;
}
К данному списку обращается множество потоков.
нужно заблокировать чтение(выполнение зеленого) если другой поток выполняет запись(выполняется красный метод) и восстановить работу зеленого как только красный закончит работу.
Причем чтение может выполнятся "одновременно" несколькими потоками если только не выполняется запись... по этому lock(object) ко всем методам не подходит. Чет не могу сообразить как это красиво реализовать...
Добавлено через 7 минут
Блин вот тупил часа 2, создал тему и тут же вспомнил про ManualResetEvent и все встало на свои места. Тема закрыта. А вообще самое лучше решение - ReaderWriterLock