Изучаю тему тредов. Насколько мне известно, если программа не ориентирована на многопотоковое исполнение и происходит параллельное чтение/запись, это может привести к непредвиденным последствиям.
Однако предположим, что идеальная точность не имеет значения? Допустим, вы опрашиваете координаты мыши в одном потоке, и ваш основной поток считывает эти значения без блокировки. Вы можете не получить идеально точные результаты (потенциальное сочетание новых и старых данных), но при достаточно быстром опросе неточность должна быть незаметна для пользователя. Имеет ли значение, что метод не является потокобезопасным? Может ли это вызвать другие проблемы?
Ответ 1 · рейтинг 2 · clcto
Вы не знаете, каким будет результат, и не можете сказать, близок ли он на самом деле к ожидаемому значению. Скажем, позиция мыши по оси X хранится в 2 байтах, но ваша система может атомарно записать только один байт. Затем, если фактическое значение изменится за вашей спиной с 255 на 256 (с 0x00FF на 0x0100), будет внутренний шаг, 0x00FF -> 0x01FF -> 0x0100 (или аналогичный), который вы можете неосознанно прочитать. Тогда вы могли бы подумать, что ваше значение x равно 511, а не 256, что является значительной разницей, а не просто несколькими пикселями.
Ответ 2 · dave
Если координаты мыши не обновляются атомарно, вы можете получить недопустимые значения.
Например, если длинное значение, представляющее координату x, не обновляется атомарно, то прочитанное вами значение может быть недействительным.