Skip to content

Commit 982a238

Browse files
authored
Rollup merge of #118581 - ianrrees:add-drop-note-to-once_lock, r=workingjubilee
OnceLock: Add note about drop and statics Hi! Just a minor documentation addition, I've attempted to build docs locally but ran in to issues, so am not 100% sure this change will render correctly.
2 parents 992f7ee + 88fccc4 commit 982a238

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

library/std/src/sync/once_lock.rs

+25-14
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,36 @@ use crate::sync::Once;
1717
/// ‘lazy static’ or ‘memoizing’):
1818
///
1919
/// ```
20-
/// use std::collections::HashMap;
2120
/// use std::sync::OnceLock;
2221
///
23-
/// fn hash_map() -> &'static HashMap<u32, char> {
24-
/// static HASHMAP: OnceLock<HashMap<u32, char>> = OnceLock::new();
25-
/// HASHMAP.get_or_init(|| {
26-
/// let mut m = HashMap::new();
27-
/// m.insert(0, 'a');
28-
/// m.insert(1, 'b');
29-
/// m.insert(2, 'c');
30-
/// m
31-
/// })
22+
/// struct DeepThought {
23+
/// answer: String,
3224
/// }
3325
///
34-
/// // The `HashMap` is built, stored in the `OnceLock`, and returned.
35-
/// let _ = hash_map();
26+
/// impl DeepThought {
27+
/// # fn great_question() -> String {
28+
/// # "42".to_string()
29+
/// # }
30+
/// #
31+
/// fn new() -> Self {
32+
/// Self {
33+
/// // M3 Ultra takes about 16 million years in --release config
34+
/// answer: Self::great_question(),
35+
/// }
36+
/// }
37+
/// }
38+
///
39+
/// fn computation() -> &'static DeepThought {
40+
/// // n.b. static items do not call [`Drop`] on program termination, so if
41+
/// // [`DeepThought`] impls Drop, that will not be used for this instance.
42+
/// static COMPUTATION: OnceLock<DeepThought> = OnceLock::new();
43+
/// COMPUTATION.get_or_init(|| DeepThought::new())
44+
/// }
3645
///
37-
/// // The `HashMap` is retrieved from the `OnceLock` and returned.
38-
/// let _ = hash_map();
46+
/// // The `DeepThought` is built, stored in the `OnceLock`, and returned.
47+
/// let _ = computation().answer;
48+
/// // The `DeepThought` is retrieved from the `OnceLock` and returned.
49+
/// let _ = computation().answer;
3950
/// ```
4051
///
4152
/// Writing to a `OnceLock` from a separate thread:

0 commit comments

Comments
 (0)