925 lines
64 KiB
HTML
925 lines
64 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::atomic</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_atomic_atomic skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::</span>atomic</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-atomic.html">atomic</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-atomic.html"><atomic></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx11">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span> T <span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> atomic<span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(1)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx11">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span> U <span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> atomic<span class="sy1"><</span>U<span class="sy2">*</span><span class="sy1">></span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-memory.html"><memory></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> U<span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> atomic<span class="sy1"><</span><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>U<span class="sy1">>></span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(3)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> U<span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> atomic<span class="sy1"><</span><a href="cpp-memory-weak_ptr.html"><span class="kw741">std::<span class="me2">weak_ptr</span></span></a><span class="sy1"><</span>U<span class="sy1">>></span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td>(4)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-stdatomic.h.html"><stdatomic.h></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx23">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="co2">#define _Atomic(T) /* see below */</span></span></div>
|
|
</td>
|
|
<td>(5)</td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>每个 <code>std::atomic</code> 模板的实例化和全特化定义一个原子类型。若一个线程写入原子对象,同时另一线程从它读取,则行为良好定义(数据竞争的细节见<a href="cpp-language-memory_model.html">内存模型</a>)。</p>
|
|
<p>另外,对原子对象的访问可以建立线程间同步,并按 <span class="t-lc"><a href="cpp-atomic-memory_order.html">std::memory_order</a></span> 所对非原子内存访问定序。</p>
|
|
<p><code>std::atomic</code> 既不可复制亦不可移动。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx23">
|
|
<td>
|
|
<p>兼容性宏 <code>_Atomic</code> 于头文件 <a href="cpp-header-stdatomic.h.html"><tt><stdatomic.h></tt></a> 中提供,使得两者均良构时 <span class="t-c"><span class="mw-geshi cpp source-cpp">_Atomic<span class="br0">(</span>T<span class="br0">)</span></span></span> 等同于 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span>T<span class="sy1">></span></span></span> 。</p>
|
|
<p>未指定包含 <code><stdatomic.h></code> 时命名空间 <code>std</code> 中的任何声明可用。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E7.89.B9.E5.8C.96">特化</span></h3>
|
|
<h4><span class="mw-headline" id=".E4.B8.BB.E6.A8.A1.E6.9D.BF">主模板</span></h4>
|
|
<p>主 <code>std::atomic</code> 模板可用任何满足<a href="cpp-named_req-CopyConstructible.html"><span style="font-style:italic">可复制构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyConstructible)</span></a> 及<a href="cpp-named_req-CopyAssignable.html"><span style="font-style:italic">可复制赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyAssignable)</span></a> 的<a href="cpp-named_req-TriviallyCopyable.html"><span style="font-style:italic">可平凡复制</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(TriviallyCopyable)</span></a> 类型 <code>T</code> 特化。若下列任何值为 <code>false</code> 则程序为谬构:</p>
|
|
<ul>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-types-is_trivially_copyable.html"><span class="kw500">std::<span class="me2">is_trivially_copyable</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">::</span><span class="me2">value</span></span></span></li>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-types-is_copy_constructible.html"><span class="kw532">std::<span class="me2">is_copy_constructible</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">::</span><span class="me2">value</span></span></span></li>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-types-is_move_constructible.html"><span class="kw538">std::<span class="me2">is_move_constructible</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">::</span><span class="me2">value</span></span></span></li>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-types-is_copy_assignable.html"><span class="kw550">std::<span class="me2">is_copy_assignable</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">::</span><span class="me2">value</span></span></span></li>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-types-is_move_assignable.html"><span class="kw556">std::<span class="me2">is_move_assignable</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">::</span><span class="me2">value</span></span></span></li>
|
|
</ul>
|
|
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">bool</span><span class="sy1">></span></span></span> 使用初等模板。它保证是标准布局结构体。</p>
|
|
<h4><span class="mw-headline" id=".E9.83.A8.E5.88.86.E7.89.B9.E5.8C.96">部分特化</span></h4>
|
|
<p>标准库为下列类型提供 <code>std::atomic</code> 模板的特化,它们拥有初等模板所不拥有的额外属性:</p>
|
|
<p>2) 对所有指针类型的部分特化 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span>U<span class="sy2">*</span><span class="sy1">></span></span></span> 。这些特化拥有标准布局<span class="t-rev-inl t-until-cxx20"><span>、平凡默认构造函数</span> <span><span class="t-mark-rev t-until-cxx20">(C++20 前)</span></span></span>和平凡析构函数。除了为所有原子类型提供的操作,这些特化额外支持适合指针类型的原子算术运算,例如 <a href="cpp-atomic-atomic-fetch_add.html"><code>fetch_add</code></a> 、 <a href="cpp-atomic-atomic-fetch_sub.html"><code>fetch_sub</code></a> 。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx20">
|
|
<td>
|
|
<p>3-4) 为 <span class="t-lc"><a href="cpp-memory-shared_ptr.html">std::shared_ptr</a></span> 和 <span class="t-lc"><a href="cpp-memory-weak_ptr.html">std::weak_ptr</a></span> 提供部分特化 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>U<span class="sy1">>></span></span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-memory-weak_ptr.html"><span class="kw741">std::<span class="me2">weak_ptr</span></span></a><span class="sy1"><</span>U<span class="sy1">>></span></span></span> 。</p>
|
|
<p>细节见 <a href="cpp-memory-shared_ptr-atomic2.html"><tt>std::atomic<span class="t-dsc-small"><std::shared_ptr></span></tt></a> 和 <a href="cpp-memory-weak_ptr-atomic2.html"><tt>std::atomic<span class="t-dsc-small"><std::weak_ptr></span></tt></a> 。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h4><span class="mw-headline" id=".E5.AF.B9.E6.95.B4.E6.95.B0.E7.B1.BB.E5.9E.8B.E7.9A.84.E7.89.B9.E5.8C.96">对整数类型的特化</span></h4>
|
|
<p>以下列整数类型之一实例化时, <code>std::atomic</code> 提供适合于整数类型的额外原子操作,例如 <a href="cpp-atomic-atomic-fetch_add.html"><code>fetch_add</code></a> 、 <a href="cpp-atomic-atomic-fetch_sub.html"><code>fetch_sub</code></a> 、 <a href="cpp-atomic-atomic-fetch_and.html"><code>fetch_and</code></a> 、 <a href="cpp-atomic-atomic-fetch_or.html"><code>fetch_or</code></a> 、 <a href="cpp-atomic-atomic-fetch_xor.html"><code>fetch_xor</code></a> :</p>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>字符类型 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span> <span class="t-rev-inl t-since-cxx20"><span>、 <span class="t-c"><span class="mw-geshi cpp source-cpp">char8_t</span></span></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></span></span>、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char16_t</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char32_t</span></span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">wchar_t</span></span></span> ;</li>
|
|
<li>标准有符号整数类型: <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">signed</span> <span class="kw4">char</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">short</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">long</span></span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">long</span> <span class="kw4">long</span></span></span> ;</li>
|
|
<li>标准无符号整数类型: <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">char</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">short</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">long</span></span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span></span></span> ;</li>
|
|
<li>任何头文件 <a href="cpp-header-cstdint.html"><tt><cstdint></tt></a> 中的 typedef 所需的额外整数类型。</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<p>另外,结果的 <code>std::atomic<<i>Integral</i>></code> 特化拥有标准布局<span class="t-rev-inl t-until-cxx20"><span>、平凡默认构造函数</span> <span><span class="t-mark-rev t-until-cxx20">(C++20 前)</span></span></span>和平凡析构函数。定义有符号整数算术为使用补码;无未定义结果。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx20">
|
|
<td>
|
|
<h4><span class="mw-headline" id=".E5.AF.B9.E6.B5.AE.E7.82.B9.E7.B1.BB.E5.9E.8B.E7.9A.84.E7.89.B9.E5.8C.96">对浮点类型的特化</span></h4>
|
|
<p>以浮点类型 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">float</span></span></span> 、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">double</span></span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">long</span> <span class="kw4">double</span></span></span> 之一实例化时, <code>std::atomic</code> 提供适合于浮点类型的额外原子操作,例如 <a href="cpp-atomic-atomic-fetch_add.html"><code>fetch_add</code></a> 和 <a href="cpp-atomic-atomic-fetch_sub.html"><code>fetch_sub</code></a> 。</p>
|
|
<p>另外,结果的 <code>std::atomic<<i>Floating</i>></code> 特化拥有标准布局和平凡析构函数。</p>
|
|
<p>无操作导致未定义行为,即使结果不能以浮点类型表示。有效的<a href="cpp-numeric-fenv.html">浮点环境</a>可能不同于调用方线程的浮点环境。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E7.B1.BB.E5.9E.8B.E5.88.AB.E5.90.8D">类型别名</span></h3>
|
|
<p>为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> 和所有上面列出的整数类型提供如下类型别名:</p>
|
|
<table class="t-dsc-begin">
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.89.80.E6.9C.89_std::atomic.3CIntegral.3E_.E5.88.AB.E5.90.8D">所有 <code>std::atomic<Integral></code> 别名</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_bool</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">bool</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_char</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_schar</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">signed</span> <span class="kw4">char</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uchar</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">unsigned</span> <span class="kw4">char</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_short</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">short</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_ushort</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">unsigned</span> <span class="kw4">short</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">int</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_long</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">long</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_ulong</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">unsigned</span> <span class="kw4">long</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_llong</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">long</span> <span class="kw4">long</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_ullong</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_char8_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span>char8_t<span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_char16_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">char16_t</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_char32_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">char32_t</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_wchar_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><span class="kw4">wchar_t</span><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int8_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw106">std::<span class="me2">int8_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint8_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw120">std::<span class="me2">uint8_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int16_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw107">std::<span class="me2">int16_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint16_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw121">std::<span class="me2">uint16_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int32_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw108">std::<span class="me2">int32_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint32_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw122">std::<span class="me2">uint32_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int64_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw109">std::<span class="me2">int64_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint64_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw123">std::<span class="me2">uint64_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_least8_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw114">std::<span class="me2">int_least8_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_least8_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw128">std::<span class="me2">uint_least8_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_least16_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw115">std::<span class="me2">int_least16_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_least16_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw129">std::<span class="me2">uint_least16_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_least32_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw116">std::<span class="me2">int_least32_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_least32_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw130">std::<span class="me2">uint_least32_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_least64_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw117">std::<span class="me2">int_least64_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_least64_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw131">std::<span class="me2">uint_least64_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_fast8_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw110">std::<span class="me2">int_fast8_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_fast8_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw124">std::<span class="me2">uint_fast8_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_fast16_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw111">std::<span class="me2">int_fast16_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_fast16_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw125">std::<span class="me2">uint_fast16_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_fast32_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw112">std::<span class="me2">int_fast32_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_fast32_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw126">std::<span class="me2">uint_fast32_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_int_fast64_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw113">std::<span class="me2">int_fast64_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uint_fast64_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw127">std::<span class="me2">uint_fast64_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_intptr_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw119">std::<span class="me2">intptr_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uintptr_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(可选)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw133">std::<span class="me2">uintptr_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_size_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_ptrdiff_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-ptrdiff_t.html"><span class="kw101">std::<span class="me2">ptrdiff_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_intmax_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw118">std::<span class="me2">intmax_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_uintmax_t</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw132">std::<span class="me2">uintmax_t</span></span></a><span class="sy1">></span></span></span><br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E7.89.B9.E6.AE.8A.E7.94.A8.E9.80.94.E7.B1.BB.E5.9E.8B.E5.88.AB.E5.90.8D">特殊用途类型别名</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_signed_lock_free</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>免锁且对于等待/提醒最高效的有符号整数原子类型<br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><strong class="selflink"><span class="t-lines"><span>atomic_unsigned_lock_free</span></span></strong></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>免锁且对于等待/提醒最高效的无符号整数原子类型<br />
|
|
<span class="t-mark">(typedef)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>注意: <code>std::atomic_int<i>N</i>_t</code> 、 <code>std::atomic_uint<i>N</i>_t</code> 、 <code>std::atomic_intptr_t</code> 及 <code>atomic_uintptr_t</code> 分别若且唯若定义了 <code>std::int<i>N</i>_t</code> 、 <code>std::uint<i>N</i>_t</code> 、 <code>std::intptr_t</code> 及 <code>std::uintptr_t</code> 才有定义。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx20">
|
|
<td>
|
|
<p><code>std::atomic_signed_lock_free</code> 与 <code>std::atomic_unsigned_lock_free</code> 在自立实现中可选。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.88.90.E5.91.98.E7.B1.BB.E5.9E.8B">成员类型</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc-hitem">
|
|
<td>成员类型</td>
|
|
<td>定义</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td><code>value_type</code></td>
|
|
<td><code>T</code> <span class="t-mark">(无论是否特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td><code>difference_type</code></td>
|
|
<td><code>value_type</code> <span class="t-mark">(仅对 <code>atomic<<i>Integral</i>></code> <span class="t-rev-inl t-since-cxx20"><span>和 <code>atomic<<i>Floating</i>></code></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></span></span> 特化)</span><br />
|
|
<span class="t-lc"><a href="cpp-types-ptrdiff_t.html">std::ptrdiff_t</a></span> <span class="t-mark">(仅对 <code>atomic<U*></code> 特化)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p><code>difference_type</code> 不在初等 <code>atomic</code> 模板中,或不在对 <span class="t-lc"><a href="cpp-memory-shared_ptr.html">std::shared_ptr</a></span> 和 <span class="t-lc"><a href="cpp-memory-weak_ptr.html">std::weak_ptr</a></span> 的部分特化中定义。</p>
|
|
<h3><span class="mw-headline" id=".E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">成员函数</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div t-dsc-member-nobold-div">
|
|
<div><a href="cpp-atomic-atomic-atomic.html"><span class="t-lines"><span>(构造函数)</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>构造原子对象<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-operator=.html"><span class="t-lines"><span>operator=</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>存储值于原子对象<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-is_lock_free.html"><span class="t-lines"><span>is_lock_free</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>检查原子对象是否免锁<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-store.html"><span class="t-lines"><span>store</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地以非原子对象替换原子对象的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-load.html"><span class="t-lines"><span>load</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地获得原子对象的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-operator_T.html"><span class="t-lines"><span>operator T</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>从原子对象加载值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-exchange.html"><span class="t-lines"><span>exchange</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地替换原子对象的值并获得它先前持有的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-compare_exchange.html"><span class="t-lines"><span>compare_exchange_weak</span><span>compare_exchange_strong</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地比较原子对象与非原子参数的值,若相等则进行交换,若不相等则进行加载<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-wait.html"><span class="t-lines"><span>wait</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>阻塞线程直至被提醒且原子值更改<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-notify_one.html"><span class="t-lines"><span>notify_one</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提醒至少一个在原子对象上的等待中阻塞的线程<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-notify_all.html"><span class="t-lines"><span>notify_all</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>提醒所有在原子对象上的等待中阻塞的线程<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E5.B8.B8.E9.87.8F">常量</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-is_always_lock_free.html"><span class="t-lines"><span>is_always_lock_free</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-cmark">[静态]</span> <span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指示该类型是否始终免锁<br />
|
|
<span class="t-mark">(公开静态成员常量)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E7.89.B9.E5.8C.96.E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">特化成员函数</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-fetch_add.html"><span class="t-lines"><span>fetch_add</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地将参数加到存储于原子对象的值,并返回先前保有的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-fetch_sub.html"><span class="t-lines"><span>fetch_sub</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地从存储于原子对象的值减去参数,并获得先前保有的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-fetch_and.html"><span class="t-lines"><span>fetch_and</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地进行参数和原子对象的值的逐位与,并获得先前保有的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-fetch_or.html"><span class="t-lines"><span>fetch_or</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地进行参数和原子对象的值的逐位或,并获得先前保有的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-fetch_xor.html"><span class="t-lines"><span>fetch_xor</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原子地进行参数和原子对象的值的逐位异或,并获得先前保有的值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span><span>operator--</span><span>operator--<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>令原子值增加或减少一<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-operator_arith2.html"><span class="t-lines"><span>operator+=</span><span>operator-=</span><span>operator&=</span><span>operator|=</span><span>operator^=</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>加、减,或与原子值进行逐位与、或、异或<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>存在等价于 <code>std::atomic</code> 所有成员函数的非成员函数模板。这些非成员函数可以额外对非 <span class="t-lc"><strong class="selflink">std::atomic</strong></span> 特化的类型重载,但不能保证原子性。标准库中仅有的这种类型是 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-memory-shared_ptr.html"><span class="kw734">std::<span class="me2">shared_ptr</span></span></a><span class="sy1"><</span>U<span class="sy1">></span></span></span> 。</p>
|
|
<p>C 中 <code>_Atomic</code> 是<a href="c-keyword-_Atomic.html">关键词</a>并用于提供<a href="c-language-atomic.html">原子类型</a>。</p>
|
|
<p>推荐实现确保对于每个可能的类型 <code>T</code> , C 中 <span class="t-c"><span class="mw-geshi cpp source-cpp">_Atomic<span class="br0">(</span>T<span class="br0">)</span></span></span> 的表示与 C++ 中 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">atomic</span><span class="sy1"><</span>T<span class="sy1">></span></span></span> 的相同。用于确保原子性与内存顺序的机制应该兼容。</p>
|
|
<p>gcc 和 clang 上,此处描述的某些功能要求通过 <code>-latomic</code> 链接。</p>
|
|
<h3><span class="mw-headline" id=".E7.BC.BA.E9.99.B7.E6.8A.A5.E5.91.8A">缺陷报告</span></h3>
|
|
<p>下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。</p>
|
|
<table class="dsctable" style="font-size:0.8em">
|
|
<tr>
|
|
<th>DR</th>
|
|
<th>应用于</th>
|
|
<th>出版时的行为</th>
|
|
<th>正确行为</th>
|
|
</tr>
|
|
<tr>
|
|
<td><a rel="nofollow" class="external text" href="https://cplusplus.github.io/LWG/issue2441">LWG 2441</a></td>
|
|
<td>C++11</td>
|
|
<td>可选的<a href="cpp-types-integer.html">定宽整数类型</a>的原子版本的 typedef 缺失</td>
|
|
<td>已添加</td>
|
|
</tr>
|
|
<tr>
|
|
<td><a rel="nofollow" class="external text" href="https://wg21.link/P0558R1">P0558R1</a></td>
|
|
<td>C++11</td>
|
|
<td>某些原子类型函数的模板实参推导可能意外失败;<br />
|
|
提供了非法指针操作</td>
|
|
<td>实质上重写了规范:<br />
|
|
提供了成员 typedef <code>value_type</code> 与 <code>difference_type</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a rel="nofollow" class="external text" href="https://cplusplus.github.io/LWG/issue3012">LWG 3012</a></td>
|
|
<td>C++11</td>
|
|
<td><code>std::atomic<T></code> 对任何可平凡复制但非可复制的 <code>T</code> 容许</td>
|
|
<td>禁止这种特化</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic_flag.html"><span class="t-lines"><span>atomic_flag</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>免锁的布尔原子类型<br />
|
|
<span class="t-mark">(类)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-memory-shared_ptr-atomic2.html"><span class="t-lines"><span>std::atomic<span class="t-dsc-small"><std::shared_ptr></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>原子共享指针<br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-memory-weak_ptr-atomic2.html"><span class="t-lines"><span>std::atomic<span class="t-dsc-small"><std::weak_ptr></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>原子弱指针<br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|