статик переменной и Lazy, в том случае если во время работы программы будет постоянное большое кол-во обращений к этой переменной с разных потоков (больше 100к в секунду), Не будет ли при lazy инициализации, в дальнейшем, каждое обращение делать проверку на то, была ли уже эта переменная инициализирована? Тем самым замедляя работу программы.
если проверка станет проблемой (что сомнительно, один atomic load + бранч), то можете хранить &'static T, после инициализации
static LAZY: Lazy<T> = Lazy::new(|| ...); ... let reference: &'static T = Lazy::force(&LAZY); // or let reference: &'static T = &*LAZY;
О круто, не знал про force, спасибо!
А я уж думал выкрутасы с MaybeUninit и Box::leak.
Да даже без force.. Lazy реализует Deref<Target = T>, поэтому можно получить ссылку
Но эти референсы же уже не статик получаются, их в каждом потоке значит создавать?
Почему не статик? Ну да, в каждом потоке. Но только создание потока значительно дороже чем получение ссылки
Обсуждают сегодня