Skip to content

Commit 3d75bda

Browse files
committed
stop_token: inplace_stop_source全メンバ (#1384)
- stoppable-source 停止要求操作(stop request operation)を明確化 - stop_source/request_stop 効果をP2300R10に追従
1 parent 349b492 commit 3d75bda

8 files changed

Lines changed: 211 additions & 19 deletions

File tree

reference/stop_token/inplace_stop_source.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ namespace std {
2020
2121
| 名前 | 説明 | 対応バージョン |
2222
|------|------|-------|
23-
| [`(constructor)`](inplace_stop_source/op_constructor.md.nolink) | コンストラクタ | C++26 |
23+
| [`(constructor)`](inplace_stop_source/op_constructor.md) | コンストラクタ | C++26 |
2424
| `(destructor)` | デストラクタ | C++26 |
2525
| `operator=` | 代入演算子 | C++26 |
26-
| [`get_token`](inplace_stop_source/get_token.md.nolink) | 自身の停止状態を参照する[`inplace_stop_token`](inplace_stop_token.md.nolink)を返す | C++26 |
27-
| [`stop_requested`](inplace_stop_source/stop_requested.md.nolink) | 停止要求を作成したかどうかを取得する | C++26 |
28-
| [`request_stop`](inplace_stop_source/request_stop.md.nolink) | 停止要求を作成する | C++26 |
26+
| [`get_token`](inplace_stop_source/get_token.md) | 自身の停止状態を参照する[`inplace_stop_token`](inplace_stop_token.md.nolink)を返す | C++26 |
27+
| [`stop_requested`](inplace_stop_source/stop_requested.md) | 停止要求を作成したかどうかを取得する | C++26 |
28+
| [`request_stop`](inplace_stop_source/request_stop.md) | 停止要求を作成する | C++26 |
2929
3030
## 静的メンバ関数
3131
3232
| 名前 | 説明 | 対応バージョン |
3333
|------|------|-------|
34-
| [`stop_possible`](inplace_stop_source/stop_possible.md.nolink) | 停止要求を作成可能どうかを取得する | C++26 |
34+
| [`stop_possible`](inplace_stop_source/stop_possible.md) | 停止要求を作成可能どうかを取得する | C++26 |
3535
3636
3737
## 例
@@ -60,8 +60,8 @@ int main()
6060
* std::inplace_stop_token[link inplace_stop_token.md.nolink]
6161
* std::inplace_stop_callback[link inplace_stop_callback.md.nolink]
6262
* stop_requested()[link inplace_stop_token/stop_requested.md.nolink]
63-
* request_stop()[link inplace_stop_source/request_stop.md.nolink]
64-
* get_token()[link inplace_stop_source/get_token.md.nolink]
63+
* request_stop()[link inplace_stop_source/request_stop.md]
64+
* get_token()[link inplace_stop_source/get_token.md]
6565

6666
### 出力
6767
```
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# get_token
2+
* stop_token[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* inplace_stop_source[meta class]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
constexpr inplace_stop_token get_token() const noexcept;
10+
```
11+
* inplace_stop_token[link ../inplace_stop_token.md.nolink]
12+
13+
## 概要
14+
自身と停止状態を共有する[`inplace_stop_token`](../inplace_stop_token.md.nolink)を返す。
15+
16+
17+
## 戻り値
18+
自身が所有する停止状態に関連付けられた[`inplace_stop_token`](../inplace_stop_token.md.nolink)を返す。
19+
20+
21+
## 例外
22+
投げない
23+
24+
25+
## バージョン
26+
### 言語
27+
- C++26
28+
29+
### 処理系
30+
- [Clang](/implementation.md#clang): ??
31+
- [GCC](/implementation.md#gcc): ??
32+
- [ICC](/implementation.md#icc): ??
33+
- [Visual C++](/implementation.md#visual_cpp): ??
34+
35+
36+
## 参照
37+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# コンストラクタ
2+
* stop_token[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* inplace_stop_source[meta class]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
constexpr inplace_stop_source() noexcept;
10+
```
11+
12+
## 概要
13+
デフォルトコンストラクタ。停止状態を表すリソースを新たに確保して所有する。
14+
15+
16+
## 効果
17+
`*this`内部に新しい停止状態を初期化する。
18+
19+
20+
## 事後条件
21+
[`stop_requested()`](stop_requested.md) `== false`
22+
23+
24+
## 例外
25+
投げない
26+
27+
28+
## バージョン
29+
### 言語
30+
- C++26
31+
32+
### 処理系
33+
- [Clang](/implementation.md#clang): ??
34+
- [GCC](/implementation.md#gcc): ??
35+
- [ICC](/implementation.md#icc): ??
36+
- [Visual C++](/implementation.md#visual_cpp): ??
37+
38+
39+
## 参照
40+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# request_stop
2+
* stop_token[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* inplace_stop_source[meta class]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
bool request_stop() noexcept;
10+
```
11+
12+
## 概要
13+
自身が所有している停止状態に対して停止要求を作成する。
14+
15+
16+
## 効果
17+
[停止要求操作](../stoppable-source.md)を実行する。
18+
19+
20+
## 事後条件
21+
[`stop_requested()`](stop_requested.md) `== true`
22+
23+
24+
## バージョン
25+
### 言語
26+
- C++26
27+
28+
### 処理系
29+
- [Clang](/implementation.md#clang): ??
30+
- [GCC](/implementation.md#gcc): ??
31+
- [ICC](/implementation.md#icc): ??
32+
- [Visual C++](/implementation.md#visual_cpp): ??
33+
34+
35+
## 参照
36+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# stop_possible
2+
* stop_token[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* inplace_stop_source[meta class]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
static constexpr bool stop_possible() noexcept;
10+
```
11+
12+
## 概要
13+
停止要求を作成できるかどうかを返す。
14+
15+
16+
## 戻り値
17+
`true`
18+
19+
20+
## 例外
21+
投げない
22+
23+
24+
## バージョン
25+
### 言語
26+
- C++26
27+
28+
### 処理系
29+
- [Clang](/implementation.md#clang): ??
30+
- [GCC](/implementation.md#gcc): ??
31+
- [ICC](/implementation.md#icc): ??
32+
- [Visual C++](/implementation.md#visual_cpp): ??
33+
34+
35+
## 参照
36+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# stop_requested
2+
* stop_token[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* inplace_stop_source[meta class]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
bool stop_requested() const noexcept;
10+
```
11+
12+
## 概要
13+
停止要求が作成されたかどうかを返す。
14+
15+
16+
## 戻り値
17+
自身が所有する停止状態が停止要求を受け取っている場合は`true`を返す。それ以外の場合は`false`を返す。
18+
19+
20+
## 例外
21+
投げない
22+
23+
24+
## バージョン
25+
### 言語
26+
- C++26
27+
28+
### 処理系
29+
- [Clang](/implementation.md#clang): ??
30+
- [GCC](/implementation.md#gcc): ??
31+
- [ICC](/implementation.md#icc): ??
32+
- [Visual C++](/implementation.md#visual_cpp): ??
33+
34+
35+
## 参照
36+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)

reference/stop_token/stop_source/request_stop.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,8 @@ bool request_stop() noexcept;
1313
自身が所有している停止状態に対して停止要求を作成する。
1414

1515
## 効果
16-
自身が停止状態を所有していない場合は何もせず`false`を返す。
17-
18-
それ以外の場合は、自身の所有している停止状態が停止要求を受け取っているかどうかをアトミックに判定し、まだ停止要求を受け取っていない場合は停止要求を作成する。
19-
この判定処理と停止要求の作成処理は、`read-modify-write`操作によってアトミックに行われる。
20-
停止要求を受け取っていると判定した場合は何もせず`false`を返す。
21-
22-
停止要求が作成されたときは、この停止状態に対して登録されている[`stop_callback`](../stop_callback.md)のコールバックが同期的に呼び出される。このコールバックの呼び出しが例外によって終了した場合は、[`std::terminate()`](/reference/exception/terminate.md)関数が呼び出され、プログラムが異常終了する。
23-
24-
もし停止要求が作成されたときに、割り込み可能な待機関数([`wait()`](/reference/condition_variable/condition_variable_any/wait.md)[`wait_for()`](/reference/condition_variable/condition_variable_any/wait_for.md)[`wait_until()`](/reference/condition_variable/condition_variable_any/wait_until.md))で待機中の[`condition_variable_any`](/reference/condition_variable/condition_variable_any.md)が存在している場合は、そのような`condition_variable_any`全てに対して起床通知が送られ、待機関数から処理が戻る。
16+
停止状態を所有している場合は、[停止要求操作](../stoppable-source.md)を実行する(備考欄を参照)。
17+
そうでなければ、何もせず`false`を返す。
2518

2619
## 戻り値
2720
この関数の呼び出しによって停止要求が作成された場合は`true`を返す。
@@ -31,6 +24,16 @@ bool request_stop() noexcept;
3124
## 例外
3225
投げない。
3326

27+
## 備考
28+
停止要求操作では、停止状態が停止要求を受け取っているかどうかをアトミックに判定し、まだ停止要求を受け取っていない場合は停止要求を作成する。
29+
この判定処理と停止要求の作成処理は、`read-modify-write`操作と同様にアトミックに行われる。
30+
停止要求を受け取っていると判定した場合は何もせず`false`を返す。
31+
32+
停止要求が作成されたときは、この停止状態に対して登録されている[`stop_callback`](../stop_callback.md)のコールバックが同期的に呼び出される。このコールバックの呼び出しが例外によって終了した場合は、[`std::terminate()`](/reference/exception/terminate.md)関数が呼び出され、プログラムが異常終了する。
33+
34+
もし停止要求が作成されたときに、割り込み可能な待機関数([`wait()`](/reference/condition_variable/condition_variable_any/wait.md)[`wait_for()`](/reference/condition_variable/condition_variable_any/wait_for.md)[`wait_until()`](/reference/condition_variable/condition_variable_any/wait_until.md))で待機中の[`condition_variable_any`](/reference/condition_variable/condition_variable_any.md)が存在している場合は、そのような`condition_variable_any`全てに対して起床通知が送られ、待機関数から処理が戻る。
35+
36+
3437
##
3538
```cpp example
3639
#include <cassert>
@@ -130,3 +133,7 @@ int main()
130133
- [ICC](/implementation.md#icc): ??
131134
- [Visual C++](/implementation.md#visual_cpp): ??
132135

136+
137+
## 参照
138+
- [P0660R10 Stop token and joining thread](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0660r10.pdf)
139+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)

reference/stop_token/stoppable-source.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ concept stoppable-source =
3636
- `request_stop`, `stop_requested`, `stop_possible`メンバ関数の呼び出しはデータ競合を引き起こさない。
3737
- `true`を返す`request_stop`呼び出しは、`stopppable_token`または`stoppable-source`オブジェクトにおける`true`を返す`stop_requested`呼び出しに対して同期する。
3838
- コールバックの登録は、そのコールバック呼び出しに対して同期する。
39-
- `stoppable-source`が停止状態を持たないとき、`request_stop`は効果をもたず`false`を返す。そうでなければ、関連づけられた停止状態に対して停止要求操作を実行する
40-
- 停止要求操作は停止状態が停止要求を受信済みか否かを判定し、未受信であれば停止要求を行う。この判定はアトミックに行われる。
41-
- 停止要求が行われたとき、停止状態に登録されているコールバックが同期的に実行される。コールバック呼び出しが例外で終了した場合、[`terminate`](/reference/exception/terminate.md)が呼び出される。
39+
- `stoppable-source`が停止状態を持たないとき、`request_stop`は効果をもたず`false`を返す。そうでなければ、関連づけられた停止状態に対して次の停止要求操作を実行する
40+
- 停止要求操作は停止状態が停止要求を受信済みか否かを判定し、未受信であれば停止要求を行う。この判定はアトミックに行われる。
41+
- 停止要求が行われたとき、停止状態に登録されているコールバックが同期的に実行される。コールバック呼び出しが例外で終了した場合、[`terminate`](/reference/exception/terminate.md)が呼び出される。
4242
- 停止要求が行われたとき`request_stop`は`true`を返す。そうでなければ`false`を返す。
4343
- `request_stop`呼び出し後は、`stop_possible`が`false`を返すか、`stop_requested`が`true`を返す。
4444

0 commit comments

Comments
 (0)