Re[51]: Безопасность Rust
От: vdimas Россия  
Дата: 07.06.19 13:34
Оценка:
Здравствуйте, ·, Вы писали:

V>>Data race — означает одновременные попытки читать и писать некие данные, или одновременные попытки писать.

·>Да. И ведёт к undefined behaviour.

Докажи.


V>>Соотносятся эти определения следующим образом: data race может быть причиной race condition.

·>Наоборот — race condition может быть причиной data race

Это уже ненормальность, однако. ))


·>если "мы не подумали, что тут лок может не захватиться".


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


V>>Но может быть и частью алгоритма.

·>Data race не может быть частью корректного алгоритма, т.к. является undefined behaiour и никакие характеристики алгоритма обеспечить не может.

Докажи.


V>>·>Нет. std::atomic гарантирует отсутсвие data race:

V>>Только для тех типов, для которых он специализируется с мьютексом унутре.
·>Это твои фантазии.

Докажи.


V>>·>"A program that has two conflicting evaluations has a data race unless ... both conflicting evaluations are atomic operations (see std::atomic) ..."

V>>·>Без всяких оговорок о конкретном memory_order или о том, какими типами они специализированы.
V>>На заборе тоже написано... , обычный data race.
·>Это твои фантазии.

Докажи.


·>Ты хочешь сказать что такой код:

·>некорректный, А если добавить signal(SIG_NEVER_HAPPENS, blah) — то всё волшебным образом станет корректно?

Да ты еще и русского языка не понимаешь. ))
Я хочу сказать, что такой код всегда корректный.
Обратное требуется доказать.


V>>Исходники System V доступны, там для обсуждаемых вещей никаких ассемблерных вставок.

·>Не понял что ты имеешь в виду. Дай ссылку что-ли.

Ссылку легко найдёшь сам.


V>>А во вторых, разрешено всё, что не запрещено.

·>Использование типов кроме std::atomic конкурентно запрещено явно.

Не запрещено.


·>Ну запрещено в том смысле, что объявлено как UB.


Объявлено как data race, а не UB.


V>>Вызывать собственный обработчик никем не запрещено.

·>Вызывать можно функцию, а не "обработчик". Функция начинает обрабатывать сигнал, когда ось дёргает её для обработки сигнала. А просто вызов функции работает как... ээ.. вызов функции — со всеми соответствующими гарантиями.

И что тебя смущает?


V>>Т.е., возможны ситуации:

V>>- два разных потока обрабатывают два разных сигнала одновременно;
V>>- один и тот же поток обрабатывает оба сигнала, причём, второй сигнал залетел реентерабельно, не дожидаясь завершения работы первого обработчика.
·>Это не значит, что они могут шарить данные как хотят.

Могут как хотят.


·>Вообще это два разных механизма сигналы и треды — и требуется очень осторожный подход что можно делать, что нельзя.


В стандарте явно говорится о обработчике сигнала, вызываемого из некоего треда процесса.
"Осторожный подход" тут требуется только если совсем не понимать, что такое прерывание.
Выросло, блин, поколение next...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.