Skip to content

Commit a596159

Browse files
behnambehnam-oneschema
authored andcommitted
std: Doc blocking behavior of LazyLock methods
1 parent 62d7ed4 commit a596159

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

library/std/src/sync/lazy_lock.rs

+15-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ union Data<T, F> {
2020
/// A value which is initialized on the first access.
2121
///
2222
/// This type is a thread-safe [`LazyCell`], and can be used in statics.
23+
/// Since initialization may be called from multiple threads, any
24+
/// dereferencing call will block the calling thread if another
25+
/// initialization routine is currently running.
2326
///
2427
/// [`LazyCell`]: crate::cell::LazyCell
2528
///
@@ -81,8 +84,7 @@ pub struct LazyLock<T, F = fn() -> T> {
8184
}
8285

8386
impl<T, F: FnOnce() -> T> LazyLock<T, F> {
84-
/// Creates a new lazy value with the given initializing
85-
/// function.
87+
/// Creates a new lazy value with the given initializing function.
8688
#[inline]
8789
#[unstable(feature = "lazy_cell", issue = "109736")]
8890
pub const fn new(f: F) -> LazyLock<T, F> {
@@ -134,9 +136,11 @@ impl<T, F: FnOnce() -> T> LazyLock<T, F> {
134136
}
135137
}
136138

137-
/// Forces the evaluation of this lazy value and
138-
/// returns a reference to result. This is equivalent
139-
/// to the `Deref` impl, but is explicit.
139+
/// Forces the evaluation of this lazy value and returns a reference to
140+
/// result. This is equivalent to the `Deref` impl, but is explicit.
141+
///
142+
/// This method will block the calling thread if another initialization
143+
/// routine is currently running.
140144
///
141145
/// # Examples
142146
///
@@ -204,6 +208,11 @@ impl<T, F> Drop for LazyLock<T, F> {
204208
impl<T, F: FnOnce() -> T> Deref for LazyLock<T, F> {
205209
type Target = T;
206210

211+
/// Dereferences the value.
212+
///
213+
/// This method will block the calling thread if another initialization
214+
/// routine is currently running.
215+
///
207216
#[inline]
208217
fn deref(&self) -> &T {
209218
LazyLock::force(self)
@@ -232,7 +241,7 @@ impl<T: fmt::Debug, F> fmt::Debug for LazyLock<T, F> {
232241
}
233242

234243
// We never create a `&F` from a `&LazyLock<T, F>` so it is fine
235-
// to not impl `Sync` for `F`
244+
// to not impl `Sync` for `F`.
236245
#[unstable(feature = "lazy_cell", issue = "109736")]
237246
unsafe impl<T: Sync + Send, F: Send> Sync for LazyLock<T, F> {}
238247
// auto-derived `Send` impl is OK.

0 commit comments

Comments
 (0)