Re[9]: COW and thread safety in Qt
От: andyp  
Дата: 12.10.23 15:18
Оценка: +1
Здравствуйте, Skorodum, Вы писали:

S>Здравствуйте, andyp, Вы писали:


A>>Как он может за что-то отвечать, если у Foo внутри mutable члены, а работают с элементами контейнера через константный указатель? Контейнер даже не будет знать о том, что внутри одного из его объектов что-то поменялось.

S>Ок, получилось воспроизвести и для этого не нужны никакие потоки, но(!) только ипользуя функцию at, про которую явно сказано, что она только для чтения и никогда не делает глубокую копию.

Можно просто constData использовать и читать по указателю.

Ну в твоем примере это глупо, а если это, скажем, последний элемент, подтянутый из БД и закэшированный внутри класса? Const у методов означает семантическую константность, а не битовую. Для синхронизации важна битовая.

A>>Константный доступ тоже может требовать синхронизации, а тут эти две вещи спарены. Говорил же, ошибки дизайна имхо.

S>Если преднамеренно абьюзить константность и мутабельность, то много где чего сломать можно

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

S>P.S. Код из разряда тупых головоломок на собеседование...


Для ж чего еще форум? Чтобы нечто потыкать палочкой и получше самому разобраться с помощью коллег. Мой пример головоломки на собеседовании — это поведение метода capacity() у QVector. Сделал нечто, приведшее к тому, что твой конкретный вектор отцепился от общего буфера, и у тебя внезапно capacity изменилась. Можно написать трехстрочник и спрашивать, что в нем не так
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.