Показать сообщение отдельно
Непрочитано 15.08.2016, 04:36   #1
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Многопоточность: блокировка чтения при записи.

Допустим есть список в котором что то храним.
Код:
        private static OrderedDictionary<int, string> testMem = new OrderedDictionary<int, string>();

        public static void addIntString(int testInt, string testString)
        {
            testMem.Add(testInt, testString);
        }
        public static string getStringByInt(int testInt)
        {
            string testString;
            testMem.TryGetValue(testInt, out testString);
            return testString;
        }
К данному списку обращается множество потоков.
нужно заблокировать чтение(выполнение зеленого) если другой поток выполняет запись(выполняется красный метод) и восстановить работу зеленого как только красный закончит работу.
Причем чтение может выполнятся "одновременно" несколькими потоками если только не выполняется запись... по этому lock(object) ко всем методам не подходит. Чет не могу сообразить как это красиво реализовать...

Добавлено через 7 минут
Блин вот тупил часа 2, создал тему и тут же вспомнил про ManualResetEvent и все встало на свои места. Тема закрыта. А вообще самое лучше решение - ReaderWriterLock

Последний раз редактировалось krisadr; 15.08.2016 в 08:09. Причина: Добавлено сообщение
krisadr вне форума Ответить с цитированием