достаточно, чтобы записанные данные просчитались без интерливинга?
Не понял второе или 😁 Объясняю на примере. Имплементация Union-типов. Есть Int и Double. Int — 32 байта, Double — 64. Хочу переменную a, тип которой определяется рантаймом. Может быть или Int, или Double. Хочу иметь глобальную рантайм-таблицу актуальных типов. Тип этой таблицы — структура, где каждое поле — идентификатор актуального типа. Индекс у a — 1. Возможных вариантов у a — два. Значит "флаг", овтечающий за рантайм-тип a — один бит. Получаем к нему доступ с помощью этой таблицы в рантайме. Отлично. Теперь вопрос, как сделать атомарное присваивание. Например, a = 1. По сути, это две операции — загрузка значения и загрузка типа в таблицу. Вот здесь-то и race condition, которого я и хочу избежать. Как вариант, создавать при запуске программы много мутексов — по одному на каждую переменную в программе.
Обсуждают сегодня