Re[27]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 06.06.19 08:10
Оценка: +6 :))
Здравствуйте, smeeld, Вы писали:

S>использование сохранённого ранее значения в reinit_if_necessary(descp, current_chunk) вместо получаемого с get_current_storage_chunk, приведёт к сегфолту в течении 1-5 секунд. Там везде вызывается get по той причине, что другие могут вызвать и вызывают set. Использование непоследовательного значения в set, полученного не через вызов get при вызове set, а через вызов get с сохранением этого значения где-то и применением его через некоторое время в set, приведёт к нарушению механизма синхронизации. Там lockfree.


Кстати говоря, вот это все выглядит просто феерично. У вас в многопоточном коде есть что-то вроде:
data->set_v(data->get_v());

и вы пытаетесь вещать, что это никак нельзя переписать вот так:
auto v = data->get_v();
data->set_v(v);

Поскольку тогда в v может оказаться "непоследовательное" значение, т.к. где-то на другой нити кто-то навызывает set/get_v.

Вот это уже точно смахивает на детский сад, поскольку даже вот в этом виде:
data->set_v(data->get_v());

у вас нет никаких гарантий того, что в set_v попадет "последовательное" значение из только что вызванного get_v. Ибо между вызовом get_v и передачей значения в set_v может вклиниться кто угодно и навызывать set/get_v сколько угодно раз.

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

Тем не менее, пояснение вида "Там везде вызывается get по той причине, что другие могут вызвать и вызывают set. Использование непоследовательного значения в set, полученного не через вызов get при вызове set, а через вызов get с сохранением этого значения где-то и применением его через некоторое время в set, приведёт к нарушению механизма синхронизации." феерично само по себе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.