Можно ли игнорировать безопасность потоков?

Изучаю тему тредов. Насколько мне известно, если программа не ориентирована на многопотоковое исполнение и происходит параллельное чтение/запись, это может привести к непредвиденным последствиям.

Однако предположим, что идеальная точность не имеет значения? Допустим, вы опрашиваете координаты мыши в одном потоке, и ваш основной поток считывает эти значения без блокировки. Вы можете не получить идеально точные результаты (потенциальное сочетание новых и старых данных), но при достаточно быстром опросе неточность должна быть незаметна для пользователя. Имеет ли значение, что метод не является потокобезопасным? Может ли это вызвать другие проблемы?


person Fault    schedule 05.02.2014    source источник
comment
Опрос координат мыши — плохой пример, потому что он слишком линейный, т. е. его легко выполнить с помощью одного потока. Потоки лучше всего использовать для задач, которые выигрывают от разделяй и властвуй.   -  person Alex W    schedule 05.02.2014


Ответы (2)


Вы не знаете, каким будет результат, и не можете сказать, близок ли он на самом деле к ожидаемому значению. Скажем, позиция мыши по оси X хранится в 2 байтах, но ваша система может атомарно записать только один байт. Затем, если фактическое значение изменится за вашей спиной с 255 на 256 (с 0x00FF на 0x0100), будет внутренний шаг, 0x00FF -> 0x01FF -> 0x0100 (или аналогичный), который вы можете неосознанно прочитать. Тогда вы могли бы подумать, что ваше значение x равно 511, а не 256, что является значительной разницей, а не просто несколькими пикселями.

person clcto    schedule 05.02.2014

Если координаты мыши не обновляются атомарно, вы можете получить недопустимые значения.

Например, если длинное значение, представляющее координату x, не обновляется атомарно, то прочитанное вами значение может быть недействительным.

person dave    schedule 05.02.2014