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이 더 선호되는 경우가 많아요.

더 알아보기 (Learn more)