<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 3924: Stop token data race avoidance requirements unclear</title>
<meta property="og:title" content="Issue 3924: Stop token data race avoidance requirements unclear">
<meta property="og:description" content="C++ library issue. Status: New">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue3924.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="3924"><a href="lwg-active.html#3924">3924</a>. Stop token data race avoidance requirements unclear</h3>
<p><b>Section:</b> 32.3.1 <a href="https://wg21.link/thread.stoptoken.intro">[thread.stoptoken.intro]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
 <b>Submitter:</b> Brian Bi <b>Opened:</b> 2023-04-16 <b>Last modified:</b> 2023-05-24</p>
<p><b>Priority: </b>3
</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
The first sentence of 32.3.1 <a href="https://wg21.link/thread.stoptoken.intro">[thread.stoptoken.intro]</a>/5 says:
</p>
<blockquote style="border-left: 3px solid #ccc;padding-left: 15px;">
<p>
Calls to the functions <code>request_stop</code>, <code>stop_requested</code>, and <code>stop_possible</code> do not introduce data races.
</p>
</blockquote>
<p>
This could be read as saying that if you have a program that doesn't contain data races, 
and you change it by adding a call to any of these three functions, such a change does not 
"introduce" data races into the program. In other words, it could be read as saying that 
these three functions don't race with any other member functions on the same 
<code>stop_token</code> or <code>stop_source</code> object.
<p/>
I'm guessing the actual intended meaning is that calls to these three functions do not race
with each other, because it would be more expensive if concurrent calls with 
<code>stop_token::operator=</code> were also required to not race. (Also, none of these functions 
can avoid racing with the destructor.)
</p>

<p><i>[2023-05-24; Reflector poll]</i></p>

<p>
Set priority to 3 after reflector poll.
</p>
<p>
"What about <code>get_token</code>? <code>operator==</code>?"
</p>
<p>
"Other functions like <code>get_stop_token</code> can also be called
concurrently. I think the text is actually correct."
</p>



<p id="res-3924"><b>Proposed resolution:</b></p>
<p>
This wording is relative to <a href="https://wg21.link/N4944" title=" Working Draft, Standard for Programming Language C++">N4944</a>.
</p>
<ol>
<li>
<p>Modify 32.3.1 <a href="https://wg21.link/thread.stoptoken.intro">[thread.stoptoken.intro]</a> as indicated:</p>

<blockquote>
<p>
-5- Calls to the functions <code>request_stop</code>, <code>stop_requested</code>, and <code>stop_possible</code> 
do not introduce data races <ins>with each other</ins>.
A call to <code>request_stop</code> that returns <code>true</code> synchronizes with a call to 
<code>stop_requested</code> on an associated <code>stop_token</code> or <code>stop_source</code> object that 
returns <code>true</code>. Registration of a callback synchronizes with the invocation of that callback.
</p>
</blockquote>
</li>

</ol>






</body>
</html>
