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

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

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

25 ответов

41 просмотр

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

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
Почему вхолостую то? Ты про тот случай, что он мож...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта