Skip to content

Commit

Permalink
Automatic update from GitHub Actions workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions committed Nov 25, 2024
1 parent 04051a7 commit 7befc66
Show file tree
Hide file tree
Showing 23 changed files with 258 additions and 136 deletions.
58 changes: 40 additions & 18 deletions issue4174.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 4174: Refer back to container requirements when extending them</title>
<meta property="og:title" content="Issue 4174: Refer back to container requirements when extending them">
<title>Issue 4174: How does [atomics.order] p3 apply when then modification is an initialization?</title>
<meta property="og:title" content="Issue 4174: How does [atomics.order] p3 apply when then modification is an initialization?">
<meta property="og:description" content="C++ library issue. Status: New">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue4174.html">
<meta property="og:type" content="website">
Expand Down Expand Up @@ -62,29 +62,51 @@
<body>
<hr>
<p><em>This page is a snapshot from the LWG issues list, see the <a href="lwg-active.html">Library Active Issues List</a> for more information and the meaning of <a href="lwg-active.html#New">New</a> status.</em></p>
<h3 id="4174"><a href="lwg-active.html#4174">4174</a>. Refer back to container requirements when extending them</h3>
<p><b>Section:</b> 23 <a href="https://wg21.link/containers">[containers]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
<b>Submitter:</b> Jonathan Wakely <b>Opened:</b> 2024-11-22 <b>Last modified:</b> 2024-11-25</p>
<h3 id="4174"><a href="lwg-active.html#4174">4174</a>. How does [atomics.order] p3 apply when then modification is an initialization?</h3>
<p><b>Section:</b> 32.5.4 <a href="https://wg21.link/atomics.order">[atomics.order]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
<b>Submitter:</b> jim x <b>Opened:</b> 2024-11-13 <b>Last modified:</b> 2024-11-24</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View other</b> <a href="lwg-index-open.html#containers">active issues</a> in [containers].</p>
<p><b>View all other</b> <a href="lwg-index.html#containers">issues</a> in [containers].</p>
<p><b>View other</b> <a href="lwg-index-open.html#atomics.order">active issues</a> in [atomics.order].</p>
<p><b>View all other</b> <a href="lwg-index.html#atomics.order">issues</a> in [atomics.order].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
We sometimes give detailed specifications of container members which add
additional specification to the common requirements in
23.2.2 <a href="https://wg21.link/container.requirements.general">[container.requirements.general]</a>, for example
23.3.11.5 <a href="https://wg21.link/vector.modifiers">[vector.modifiers]</a> defines <code class='backtick'>vector::erase</code> without actually
saying it erases any elements. The actual effects of <code class='backtick'>erase</code> are given in
23.2.4 <a href="https://wg21.link/sequence.reqmts">[sequence.reqmts]</a>.
Consider this example
</p>
<blockquote><pre>
std::atomic&lt;int&gt; v = 0;
// thread 1:
v.load(std::memory_order::seq_cst);
//thread 2:
v.store(1,std::memory_order::seq_cst);
</pre></blockquote>
<p>
Authors of library wording often struggle with this non-local form of
specification, where we sometimes do spell out container member functions
in full, and sometimes rely on distant wording that applies to all containers.
It would be easier if <code class='backtick'>vector::erase</code> referred back to
23.2.4 <a href="https://wg21.link/sequence.reqmts">[sequence.reqmts]</a>.
If the load operation reads the value <code class='backtick'>0</code>, how are load and store operations ordered in the single total order?
According to 32.5.4 <a href="https://wg21.link/atomics.order">[atomics.order]</a> p3 (emphasize mine)
</p>
<blockquote style="border-left: 3px solid #ccc;padding-left: 15px;">
<p>
An atomic operation <i>A</i> on some atomic object <i>M</i> is <i>coherence-ordered before</i>
another atomic operation <i>B</i> on <i>M</i> if
</p>
<ol style="list-style-type: none">
<li><p>[&hellip;]</p></li>
<li><p>(3.3) &mdash; <i>A</i> and <i>B</i> are not the same atomic read-modify-write operation,
and there exists an <b>atomic modification <i>X</i></b> of <i>M</i> such that <i>A</i> reads the value stored by
<i>X</i> and <i>X</i> precedes <i>B</i> in the modification order of <i>M</i>, or</p></li>
</ol>
</blockquote>
<p>
According to 32.5.8.2 <a href="https://wg21.link/atomics.types.operations">[atomics.types.operations]</a> p3 (emphasize mine)
</p>
<blockquote style="border-left: 3px solid #ccc;padding-left: 15px;">
<i>Effects</i>: Initializes the object with the value <code>desired</code>. <b>Initialization is not an atomic operation</b>
(6.9.2 <a href="https://wg21.link/intro.multithread">[intro.multithread]</a>).
</blockquote>
<p>
So, how does 32.5.4 <a href="https://wg21.link/atomics.order">[atomics.order]</a> p3 apply to this example such that the load operation precedes
the store operation in the single total order <i>S</i>?
</p>


Expand Down
100 changes: 100 additions & 0 deletions issue4176.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 4176: Refer back to container requirements when extending them</title>
<meta property="og:title" content="Issue 4176: Refer back to container requirements when extending them">
<meta property="og:description" content="C++ library issue. Status: New">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue4176.html">
<meta property="og:type" content="website">
<meta property="og:image" content="http://cplusplus.github.io/LWG/images/cpp_logo.png">
<meta property="og:image:alt" content="C++ logo">
<style>
p {text-align:justify}
li {text-align:justify}
pre code.backtick::before { content: "`" }
pre code.backtick::after { content: "`" }
blockquote.note
{
background-color:#E0E0E0;
padding-left: 15px;
padding-right: 15px;
padding-top: 1px;
padding-bottom: 1px;
}
ins {background-color:#A0FFA0}
del {background-color:#FFA0A0}
table.issues-index { border: 1px solid; border-collapse: collapse; }
table.issues-index th { text-align: center; padding: 4px; border: 1px solid; }
table.issues-index td { padding: 4px; border: 1px solid; }
table.issues-index td:nth-child(1) { text-align: right; }
table.issues-index td:nth-child(2) { text-align: left; }
table.issues-index td:nth-child(3) { text-align: left; }
table.issues-index td:nth-child(4) { text-align: left; }
table.issues-index td:nth-child(5) { text-align: center; }
table.issues-index td:nth-child(6) { text-align: center; }
table.issues-index td:nth-child(7) { text-align: left; }
table.issues-index td:nth-child(5) span.no-pr { color: red; }
@media (prefers-color-scheme: dark) {
html {
color: #ddd;
background-color: black;
}
ins {
background-color: #225522
}
del {
background-color: #662222
}
a {
color: #6af
}
a:visited {
color: #6af
}
blockquote.note
{
background-color: rgba(255, 255, 255, .10)
}
}
</style>
</head>
<body>
<hr>
<p><em>This page is a snapshot from the LWG issues list, see the <a href="lwg-active.html">Library Active Issues List</a> for more information and the meaning of <a href="lwg-active.html#New">New</a> status.</em></p>
<h3 id="4176"><a href="lwg-active.html#4176">4176</a>. Refer back to container requirements when extending them</h3>
<p><b>Section:</b> 23 <a href="https://wg21.link/containers">[containers]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
<b>Submitter:</b> Jonathan Wakely <b>Opened:</b> 2024-11-22 <b>Last modified:</b> 2024-11-25</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View other</b> <a href="lwg-index-open.html#containers">active issues</a> in [containers].</p>
<p><b>View all other</b> <a href="lwg-index.html#containers">issues</a> in [containers].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
We sometimes give detailed specifications of container members which add
additional specification to the common requirements in
23.2.2 <a href="https://wg21.link/container.requirements.general">[container.requirements.general]</a>, for example
23.3.11.5 <a href="https://wg21.link/vector.modifiers">[vector.modifiers]</a> defines <code class='backtick'>vector::erase</code> without actually
saying it erases any elements. The actual effects of <code class='backtick'>erase</code> are given in
23.2.4 <a href="https://wg21.link/sequence.reqmts">[sequence.reqmts]</a>.
</p>
<p>
Authors of library wording often struggle with this non-local form of
specification, where we sometimes do spell out container member functions
in full, and sometimes rely on distant wording that applies to all containers.
It would be easier if <code class='backtick'>vector::erase</code> referred back to
23.2.4 <a href="https://wg21.link/sequence.reqmts">[sequence.reqmts]</a>.
</p>


<p id="res-4176"><b>Proposed resolution:</b></p>
<p>
</p>





</body>
</html>
Loading

0 comments on commit 7befc66

Please sign in to comment.