Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: FaultОтветов: 2

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

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

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

multithreadingthread-safetymutex

Ответы

Ответ 1 · рейтинг 2 · clcto

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

Ответ 2 · dave

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы