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

А зачем создают отдельный объект для lock? Что будет, если я

использую например сам массив?

Может ли от этого повиснуть вся программа? И почему именно?

13 ответов

22 просмотра

Пустой объект, который создали сами проще контролировать. Если этот массив, на который вы лочитесь убегает куда то наружу (отдаётся в свойстве/методе) кто-то снаружи тоже может сделать на него lock. Последствия разнятся от "ой, что-то всё медленно" до "дедлок, всё зависло". Ну и вдруг вы там поле с массивом переназначаете на новый массив? Lock об этом в курсе не будет, он будет держать старый экземпляр

Николай-Threadripper Автор вопроса
SomebodyOdd
Пустой объект, который создали сами проще контроли...

А если я работаю с этим массивом, пока он в Шоке? У меня именно всё зависает, и не знаю как ловить. Похоже deadlock. Но точно знаю, что почти никогда не использовал отдельный объект для lock, но он нигде не должен переназначаться. Не уверен в причине, только подозреваю.

Николай Threadripper
А если я работаю с этим массивом, пока он в Шоке? ...

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

Николай-Threadripper Автор вопроса
SomebodyOdd
Просто работать с массивом - не должно давать проб...

А если и делает, то всегда отпускает ведь. 🥺 Могло быть подвисание временное, но не вечное ведь, и сразу всего приложения. При том что всё работает в разных потоках. При попытке приостановить делаг, ничего не происходит.

Николай Threadripper
А если и делает, то всегда отпускает ведь. 🥺 Могло...

Фокус дедлока как раз в том, что возникает ситуация, где никто из участников дедлока ничего не может отпустить, потому что все ждут чуда что отпустит кто-то другой. Доставайте отладчик, смотрите что и где именно виснет. Просто рассуждая о локах вы ничего не решите, нужно искать где

Николай-Threadripper Автор вопроса
SomebodyOdd
Фокус дедлока как раз в том, что возникает ситуаци...

Вот отладчик то и не работает. Как можно отловить такое событие? Наверное, логгировать начало и конец каждого события? Но это не отладка.

Николай-Threadripper Автор вопроса
SomebodyOdd
Что значит, "не работает"?

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

Николай Threadripper
Ну когда зависание произошло, можно только закрыть...

А кто сказал что отлаживать надо когда уже произошло? Ходите по шагам, снимите дамп и посмотрите где потоки зависли, обложите логированием. Столько способов как подступиться к проблеме, какой-нибудь да сработает.

Николай Threadripper
Попробую, спасибо!

Я с помощью ею дебажу потоки https://marketplace.visualstudio.com/items?itemName=Diagnostics.DiagnosticsConcurrencyVisualizer2019

Николай-Threadripper Автор вопроса
AN
Я с помощью ею дебажу потоки https://marketplace.v...

Так просто видеть то не поможет. Но спасибо, может поможет.

Николай Threadripper
Так просто видеть то не поможет. Но спасибо, может...

Если потоки криво неоптимально работают сразу видно

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта