Once — 일회성 초기화 프리미티브
Once — 일회성 초기화 프리미티브
Once는 코드를 단 한 번만 실행하는 동기화 프리미티브예요. 주로 전역 정적 데이터의 지연 초기화에 사용돼요.
출처: Rust 공식 문서
본문
pub struct Once { /* private fields */ }
call_once는 여러 스레드가 동시에 호출해도 초기화 클로저가 정확히 한 번만 실행되도록 보장해요.
주요 메서드
pub const fn new() -> Once
pub fn call_once<F>(&self, f: F) where F: FnOnce()
pub fn call_once_force<F>(&self, f: F) where F: FnOnce(&OnceState)
pub fn is_completed(&self) -> bool
예시
use std::sync::Once;
static INIT: Once = Once::new();
INIT.call_once(|| {
// 단 한 번만 실행되는 초기화 코드
});
초기화 클로저가 패닉하면 Once는 독(poison)되지 않고 다시 실행될 수 있어요. call_once_force는 독 상태도 무시하고 실행해요. 1.70.0부터 OnceLock이 더 선호되는 경우가 많아요.