Необходимо реализовать доступ (изменение/считывание) из потоков к общей переменной с помощью класса Interlocked. Фрагменты кода: Общая переменная:
string bufferMessage = "None";
Запись в переменную:
Interlocked.Exchange(ref bufferMessage,
"Thread #" + threadName + " WRITE message: " + i);
Считывание:
messagesRead.Add("Thread #" + threadName + " READ message: "
+ Interlocked.Read(ref bufferMessage));
Запись проходит успешно, считывание компилятор не хочет пропускать. Выводит ошибку:
Не удается преобразовать из "ref string" в "ref long"
Есть вообще возможность считывания значения строковой переменной с помощью класса Interlocked?
Метод Read предназначен исключительно для чтения 64-битных чисел(long) на 32-битных системах, так как чтение 64-битного числа на них не является атомарной операцией.
Поэтому как для типа string, так и для других типов double, float и тд в классе Interlocked явной функции чтения не существует.
Спасибо @PetSerAl, как он заметил верно, можно атомарно прочитать значение с помощью метода CompareExchange
Interlocked.CompareExchange(ref bufferMessage, null, null)
Данный метод будет всегда возвращать значение текущей переменной bufferMessage, так как bufferMessage != null
(идет сравнение переменной bufferMessage c 3 аргументом функции)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я посмотрел одно видео (лекцию), в котором автор убеждал, что использование дизайнера в Windows Forms -- это очень плохо и вообще дело минувших днейЕсли...
Добрый день! Я пишу автотесты на C# + Selenium и для failed тестов я делаю скриншотыИ вот появилась у меня необходимость хранить эти скриншоты не локально...
Для примера есть 2 кнопки с разным контентом