169 похожих чатов

Я не очень много работал с потоками, тут возник вопрос

- если будет одновременный доступ к памяти из двух разных потоков, это само по себе приведет к ошибке?

25 ответов

32 просмотра

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

The Bird of Hermes- Автор вопроса
КТ315
Если ты пишешь, то и, наверное, читаешь? А как ты ...

Ну мне просто надо проверять, не нужно ли приостановить выполнение того, что делает поток. Так как потом крутится в бесконечном цикле, если он лишний раз проскочит из-за того, что пропустил точный момент назначения значения - это не страшно

The Bird of Hermes
Ну мне просто надо проверять, не нужно ли приостан...

А конкретная задача? Ты точно не изобретаешь критические секции?

The Bird of Hermes- Автор вопроса
s54820
А конкретная задача? Ты точно не изобретаешь крити...

У меня поток щас считывает с порта значения. Я просто хочу сделать кнопку, которая приостанавливает процесс чтения

The Bird of Hermes- Автор вопроса
The Bird of Hermes
У меня поток щас считывает с порта значения. Я про...

В ЯВУ постоянно советуют через переменную сделать, потому что "ууу, SuspendThread страааашно, боюсь!", но на деле через переменную цикл может просто проработать ещё лишний раз, остановка не мгновенной будет. Через SuspendThread - мгновенная.

The Bird of Hermes
У меня поток щас считывает с порта значения. Я про...

А поток случайно не висит в WaitForSingleObject? Может порт закрыть, поток прибить, а когда понадобится — запустить заново?

The Bird of Hermes- Автор вопроса
The Bird of Hermes- Автор вопроса
s54820
А поток случайно не висит в WaitForSingleObject? М...

Но он разве не должен закончиться с ошибкой в случае закрытия?

The Bird of Hermes
Но он разве не должен закончиться с ошибкой в случ...

Не знаю, кто он, но ты можешь сделать WaitForMultipleObjects, например. Первый объект, которого ждёшь — порт или событие от OVERLAPPED, второй объект событие для потока. Ты сигналишь событие, поток получает WAIT_OBJECT_0 + 1 и красиво выходит.

The Bird of Hermes- Автор вопроса
s54820
Не знаю, кто он, но ты можешь сделать WaitForMulti...

Ну мне то не надо чтобы поток выходил, просто на паузу встал и чтобы никаких проблем из-за этого не возникло

The Bird of Hermes
Но он разве не должен закончиться с ошибкой в случ...

Ну можешь не выходить, а снова повиснуть в ожидании, только на вот этом втором событии потока. Юзер нажмёт продолжить, ты посигналишь событием, поток снова начнёт ждать чтения и события потока. Но если у тебя порт открыт, и ты из него просто не читаешь, буферы переполнятся, данные всё равно будут теряться. Что тебе пауза даёт?

The Bird of Hermes- Автор вопроса
s54820
Ну можешь не выходить, а снова повиснуть в ожидани...

Просто чтобы перестало лететь в вывод то, что приходит😁

The Bird of Hermes
Просто чтобы перестало лететь в вывод то, что прих...

Придумал. Ты можешь выключить EDIT вывода, а в потоке перед выводом проверять, включен он или нет.

The Bird of Hermes- Автор вопроса
КТ315
Придумал. Ты можешь выключить EDIT вывода, а в пот...

Легче просто завести переменную и по её состоянию определять, нужно делать вывод или нет😁

The Bird of Hermes
Легче просто завести переменную и по её состоянию ...

Нет, это race condition. А на WinAPI можно положиться, там обратные вызовы и прочие крутые штучки.

КТ315
Нет, это race condition. А на WinAPI можно положит...

Никаких рейсов. Текст ведь отображает тот же самый поток, что будет кнопку обрабатывать, так?

s54820
Никаких рейсов. Текст ведь отображает тот же самый...

Вроде, нет. Поток там отдельный чисто для вывода, а кнопка в главном потоке, в обработчике окна.

КТ315
Вроде, нет. Поток там отдельный чисто для вывода, ...

Даже если и так, из переменной прочитается либо ноль, либо не ноль. Не могу придумать, как оно могло бы сломаться. Это же не read-modify-write, просто запись. Не успеет поток новое состояние переменной прочитать в момент нажатия кнопки, ну так и фиг бы с ним, в следующий раз прочитает.

The Bird of Hermes- Автор вопроса
КТ315
А почему ты так не сделаешь?

Да я думал че потоку вхолостую работать

The Bird of Hermes
Да я думал че потоку вхолостую работать

Почему вхолостую то? Ты про тот случай, что он может пропустить 1 цикл?

The Bird of Hermes- Автор вопроса
КТ315
Почему вхолостую то? Ты про тот случай, что он мож...

Про то, что поток читает, а считанное никому не нужно

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта