blob: 8a17611174e2d15022979675e5e575e6bc462bf9 [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A reader-writer lock"><meta name="keywords" content="rust, rustlang, rust-lang, RwLock"><title>RwLock in spin - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../spin/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../spin/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">RwLock</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block"><li><a href="#method.force_read_decrement">force_read_decrement</a></li><li><a href="#method.force_write_unlock">force_write_unlock</a></li><li><a href="#method.into_inner">into_inner</a></li><li><a href="#method.new">new</a></li><li><a href="#method.read">read</a></li><li><a href="#method.try_read">try_read</a></li><li><a href="#method.try_upgradeable_read">try_upgradeable_read</a></li><li><a href="#method.try_write">try_write</a></li><li><a href="#method.upgradeable_read">upgradeable_read</a></li><li><a href="#method.write">write</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block"><li><a href="#impl-Debug-for-RwLock%3CT%3E">Debug</a></li><li><a href="#impl-Default-for-RwLock%3CT%3E">Default</a></li><li><a href="#impl-Send-for-RwLock%3CT%3E">Send</a></li><li><a href="#impl-Sync-for-RwLock%3CT%3E">Sync</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block"><li><a href="#impl-RefUnwindSafe-for-RwLock%3CT%3E">!RefUnwindSafe</a></li><li><a href="#impl-Unpin-for-RwLock%3CT%3E">Unpin</a></li><li><a href="#impl-UnwindSafe-for-RwLock%3CT%3E">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block"><li><a href="#impl-Any-for-RwLock%3CT%3E">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-RwLock%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-RwLock%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E-for-RwLock%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Into%3CU%3E-for-RwLock%3CT%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E-for-RwLock%3CT%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E-for-RwLock%3CT%3E">TryInto&lt;U&gt;</a></li></ul></section><h2><a href="index.html">In spin</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Struct <a href="index.html">spin</a>::<wbr><a class="struct" href="#">RwLock</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/spin/rw_lock.rs.html#59-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="item-decl"><pre class="rust struct"><code>pub struct RwLock&lt;T:&nbsp;?Sized&gt; { /* private fields */ }</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A reader-writer lock</p>
<p>This type of lock allows a number of readers or at most one writer at any
point in time. The write portion of this lock typically allows modification
of the underlying data (exclusive access) and the read portion of this lock
typically allows for read-only access (shared access).</p>
<p>The type parameter <code>T</code> represents the data that this lock protects. It is
required that <code>T</code> satisfies <code>Send</code> to be shared across tasks and <code>Sync</code> to
allow concurrent access through readers. The RAII guards returned from the
locking methods implement <code>Deref</code> (and <code>DerefMut</code> for the <code>write</code> methods)
to allow access to the contained of the lock.</p>
<p>An <a href="struct.RwLockUpgradeableGuard.html"><code>RwLockUpgradeableGuard</code></a> can be upgraded to a
writable guard through the <a href="struct.RwLockUpgradeableGuard.html#method.upgrade"><code>RwLockUpgradeableGuard::upgrade</code></a>
<a href="struct.RwLockUpgradeableGuard.html#method.try_upgrade"><code>RwLockUpgradeableGuard::try_upgrade</code></a> functions.
Writable or upgradeable guards can be downgraded through their respective <code>downgrade</code>
functions.</p>
<p>Based on Facebook’s
<a href="https://github.com/facebook/folly/blob/a0394d84f2d5c3e50ebfd0566f9d3acb52cfab5a/folly/synchronization/RWSpinLock.h"><code>folly/RWSpinLock.h</code></a>.
This implementation is unfair to writers - if the lock always has readers, then no writers will
ever get a chance. Using an upgradeable lock guard can <em>somewhat</em> alleviate this issue as no
new readers are allowed when an upgradeable guard is held, but upgradeable guards can be taken
when there are existing readers. However if the lock is that highly contended and writes are
crucial then this implementation may be a poor choice.</p>
<h2 id="examples"><a href="#examples">Examples</a></h2>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>spin;
<span class="kw">let </span>lock = spin::RwLock::new(<span class="number">5</span>);
<span class="comment">// many reader locks can be held at once
</span>{
<span class="kw">let </span>r1 = lock.read();
<span class="kw">let </span>r2 = lock.read();
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>r1, <span class="number">5</span>);
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>r2, <span class="number">5</span>);
} <span class="comment">// read locks are dropped at this point
// only one write lock may be held, however
</span>{
<span class="kw">let </span><span class="kw-2">mut </span>w = lock.write();
<span class="kw-2">*</span>w += <span class="number">1</span>;
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>w, <span class="number">6</span>);
} <span class="comment">// write lock is dropped here</span></code></pre></div>
</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><div id="implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-RwLock%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#109-141">source</a><a href="#impl-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.new" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#126-131">source</a><h4 class="code-header">pub const fn <a href="#method.new" class="fnname">new</a>(user_data: T) -&gt; <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h4></section></summary><div class="docblock"><p>Creates a new spinlock wrapping the supplied data.</p>
<p>May be used statically:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>spin;
<span class="kw">static </span>RW_LOCK: spin::RwLock&lt;()&gt; = spin::RwLock::new(());
<span class="kw">fn </span>demo() {
<span class="kw">let </span>lock = RW_LOCK.read();
<span class="comment">// do something with lock
</span>drop(lock);
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into_inner" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#135-140">source</a><h4 class="code-header">pub fn <a href="#method.into_inner" class="fnname">into_inner</a>(self) -&gt; T</h4></section></summary><div class="docblock"><p>Consumes this <code>RwLock</code>, returning the underlying data.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-RwLock%3CT%3E-1" class="impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#143-340">source</a><a href="#impl-RwLock%3CT%3E-1" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;?Sized&gt; <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.read" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#166-173">source</a><h4 class="code-header">pub fn <a href="#method.read" class="fnname">read</a>(&amp;self) -&gt; <a class="struct" href="struct.RwLockReadGuard.html" title="struct spin::RwLockReadGuard">RwLockReadGuard</a>&lt;'_, T&gt;</h4></section></summary><div class="docblock"><p>Locks this rwlock with shared read access, blocking the current thread
until it can be acquired.</p>
<p>The calling thread will be blocked until there are no more writers which
hold the lock. There may be other readers currently inside the lock when
this method returns. This method does not provide any guarantees with
respect to the ordering of whether contentious readers or writers will
acquire the lock first.</p>
<p>Returns an RAII guard which will release this thread’s shared access
once it is dropped.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>mylock = spin::RwLock::new(<span class="number">0</span>);
{
<span class="kw">let </span><span class="kw-2">mut </span>data = mylock.read();
<span class="comment">// The lock is now locked and the data can be read
</span><span class="macro">println!</span>(<span class="string">&quot;{}&quot;</span>, <span class="kw-2">*</span>data);
<span class="comment">// The lock is dropped
</span>}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_read" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#198-213">source</a><h4 class="code-header">pub fn <a href="#method.try_read" class="fnname">try_read</a>(&amp;self) -&gt; Option&lt;<a class="struct" href="struct.RwLockReadGuard.html" title="struct spin::RwLockReadGuard">RwLockReadGuard</a>&lt;'_, T&gt;&gt;</h4></section></summary><div class="docblock"><p>Attempt to acquire this lock with shared read access.</p>
<p>This function will never block and will return immediately if <code>read</code>
would otherwise succeed. Returns <code>Some</code> of an RAII guard which will
release the shared access of this thread when dropped, or <code>None</code> if the
access could not be granted. This method does not provide any
guarantees with respect to the ordering of whether contentious readers
or writers will acquire the lock first.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>mylock = spin::RwLock::new(<span class="number">0</span>);
{
<span class="kw">match </span>mylock.try_read() {
<span class="prelude-val">Some</span>(data) =&gt; {
<span class="comment">// The lock is now locked and the data can be read
</span><span class="macro">println!</span>(<span class="string">&quot;{}&quot;</span>, <span class="kw-2">*</span>data);
<span class="comment">// The lock is dropped
</span>},
<span class="prelude-val">None </span>=&gt; (), <span class="comment">// no cigar
</span>};
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.force_read_decrement" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#222-225">source</a><h4 class="code-header">pub unsafe fn <a href="#method.force_read_decrement" class="fnname">force_read_decrement</a>(&amp;self)</h4></section></summary><div class="docblock"><p>Force decrement the reader count.</p>
<p>This is <em>extremely</em> unsafe if there are outstanding <code>RwLockReadGuard</code>s
live, or if called more times than <code>read</code> has been called, but can be
useful in FFI contexts where the caller doesn’t know how to deal with
RAII. The underlying atomic operation uses <code>Ordering::Release</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.force_write_unlock" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#234-237">source</a><h4 class="code-header">pub unsafe fn <a href="#method.force_write_unlock" class="fnname">force_write_unlock</a>(&amp;self)</h4></section></summary><div class="docblock"><p>Force unlock exclusive write access.</p>
<p>This is <em>extremely</em> unsafe if there are outstanding <code>RwLockWriteGuard</code>s
live, or if called when there are current readers, but can be useful in
FFI contexts where the caller doesn’t know how to deal with RAII. The
underlying atomic operation uses <code>Ordering::Release</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.write" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#280-287">source</a><h4 class="code-header">pub fn <a href="#method.write" class="fnname">write</a>(&amp;self) -&gt; <a class="struct" href="struct.RwLockWriteGuard.html" title="struct spin::RwLockWriteGuard">RwLockWriteGuard</a>&lt;'_, T&gt;</h4></section></summary><div class="docblock"><p>Lock this rwlock with exclusive write access, blocking the current
thread until it can be acquired.</p>
<p>This function will not return while other writers or other readers
currently have access to the lock.</p>
<p>Returns an RAII guard which will drop the write access of this rwlock
when dropped.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>mylock = spin::RwLock::new(<span class="number">0</span>);
{
<span class="kw">let </span><span class="kw-2">mut </span>data = mylock.write();
<span class="comment">// The lock is now locked and the data can be written
</span><span class="kw-2">*</span>data += <span class="number">1</span>;
<span class="comment">// The lock is dropped
</span>}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_write" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#309-311">source</a><h4 class="code-header">pub fn <a href="#method.try_write" class="fnname">try_write</a>(&amp;self) -&gt; Option&lt;<a class="struct" href="struct.RwLockWriteGuard.html" title="struct spin::RwLockWriteGuard">RwLockWriteGuard</a>&lt;'_, T&gt;&gt;</h4></section></summary><div class="docblock"><p>Attempt to lock this rwlock with exclusive write access.</p>
<p>This function does not ever block, and it will return <code>None</code> if a call
to <code>write</code> would otherwise block. If successful, an RAII guard is
returned.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>mylock = spin::RwLock::new(<span class="number">0</span>);
{
<span class="kw">match </span>mylock.try_write() {
<span class="prelude-val">Some</span>(<span class="kw-2">mut </span>data) =&gt; {
<span class="comment">// The lock is now locked and the data can be written
</span><span class="kw-2">*</span>data += <span class="number">1</span>;
<span class="comment">// The lock is implicitly dropped
</span>},
<span class="prelude-val">None </span>=&gt; (), <span class="comment">// no cigar
</span>};
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.upgradeable_read" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#316-323">source</a><h4 class="code-header">pub fn <a href="#method.upgradeable_read" class="fnname">upgradeable_read</a>(&amp;self) -&gt; <a class="struct" href="struct.RwLockUpgradeableGuard.html" title="struct spin::RwLockUpgradeableGuard">RwLockUpgradeableGuard</a>&lt;'_, T&gt;</h4></section></summary><div class="docblock"><p>Obtain a readable lock guard that can later be upgraded to a writable lock guard.
Upgrades can be done through the <a href="struct.RwLockUpgradeableGuard.html#method.upgrade"><code>RwLockUpgradeableGuard::upgrade</code></a> method.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_upgradeable_read" class="method has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#327-339">source</a><h4 class="code-header">pub fn <a href="#method.try_upgradeable_read" class="fnname">try_upgradeable_read</a>(&amp;self) -&gt; Option&lt;<a class="struct" href="struct.RwLockUpgradeableGuard.html" title="struct spin::RwLockUpgradeableGuard">RwLockUpgradeableGuard</a>&lt;'_, T&gt;&gt;</h4></section></summary><div class="docblock"><p>Tries to obtain an upgradeable lock guard.</p>
</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug-for-RwLock%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#342-351">source</a><a href="#impl-Debug-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;?Sized + Debug&gt; Debug for <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#343-350">source</a><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a class="fnname">fmt</a>(&amp;self, f: &amp;mut Formatter&lt;'_&gt;) -&gt; Result</h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Default-for-RwLock%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#353-357">source</a><a href="#impl-Default-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;?Sized + Default&gt; Default for <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.default" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#354-356">source</a><a href="#method.default" class="anchor"></a><h4 class="code-header">fn <a class="fnname">default</a>() -&gt; <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h4></section></summary><div class='docblock'>Returns the “default value” for a type. <a>Read more</a></div></details></div></details><section id="impl-Send-for-RwLock%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#106">source</a><a href="#impl-Send-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;?Sized + Send&gt; Send for <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h3></section><section id="impl-Sync-for-RwLock%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/spin/rw_lock.rs.html#107">source</a><a href="#impl-Sync-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;?Sized + Send + Sync&gt; Sync for <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h3></section></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-RefUnwindSafe-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; !RefUnwindSafe for <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;</h3></section><section id="impl-Unpin-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-Unpin-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;?Sized&gt; Unpin for <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: Unpin,</span></h3></section><section id="impl-UnwindSafe-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-UnwindSafe-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;?Sized&gt; UnwindSafe for <a class="struct" href="struct.RwLock.html" title="struct spin::RwLock">RwLock</a>&lt;T&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: UnwindSafe,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-Any-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Any for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a class="fnname">type_id</a>(&amp;self) -&gt; TypeId</h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-Borrow%3CT%3E-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Borrow&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow</a>(&amp;self) -&gt; &amp;T</h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-BorrowMut%3CT%3E-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; BorrowMut&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow_mut</a>(&amp;mut self) -&gt; &amp;mut T</h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-From%3CT%3E-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; From&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.from" class="anchor"></a><h4 class="code-header">fn <a class="fnname">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-Into%3CU%3E-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; Into&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: From&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">into</a>(self) -&gt; U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
<p>That is, this conversion is whatever the implementation of
<code>[From]&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-TryFrom%3CU%3E-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryFrom&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: Into&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error-1" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = Infallible</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_from" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_from</a>(value: U) -&gt; Result&lt;T, &lt;T as TryFrom&lt;U&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-RwLock%3CT%3E" class="impl has-srclink"><a href="#impl-TryInto%3CU%3E-for-RwLock%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryInto&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: TryFrom&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = &lt;U as TryFrom&lt;T&gt;&gt;::Error</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_into</a>(self) -&gt; Result&lt;U, &lt;U as TryFrom&lt;T&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="spin" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>