Skip to content

Commit 5ced8d0

Browse files
authored
Merge pull request #605 from anthonywilliams/master
Fix some typos in the concurrency section
2 parents 76de02a + 60e3875 commit 5ced8d0

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

CppCoreGuidelines.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10761,7 +10761,7 @@ the same memory. Concurrent programming is tricky for many reasons, most
1076110761
importantly that it is undefined behavior to read data in one thread after it
1076210762
was written by another thread, if there is no proper synchronization between
1076310763
those threads. Making existing single-threaded code execute concurrently can be
10764-
as trivial as adding `std::async` or `std::thread` strategically, or it can be
10764+
as trivial as adding `std::async` or `std::thread` strategically, or it can
1076510765
necessitate a full rewrite, depending on whether the original code was written
1076610766
in a thread-friendly way.
1076710767

@@ -10940,7 +10940,7 @@ Help the tools:
1094010940
##### Reason
1094110941

1094210942
If you don't share writable data, you can't have a data race.
10943-
The less sharing you do, the less chance you have to forget to synchanize access (and get data races).
10943+
The less sharing you do, the less chance you have to forget to synchronize access (and get data races).
1094410944
The less sharing you do, the less chance you have to wait on a lock (so performance can improve).
1094510945

1094610946
##### Example
@@ -10966,7 +10966,7 @@ The less sharing you do, the less chance you have to wait on a lock (so performa
1096610966
// ...
1096710967
}
1096810968

10969-
Without those `const`s, we would have to review every asynchroneously invoked function for potential data races on `surface_readings`.
10969+
Without those `const`s, we would have to review every asynchronously invoked function for potential data races on `surface_readings`.
1097010970

1097110971
##### Note
1097210972

@@ -10982,7 +10982,7 @@ No locking is needed: You can't have a data race on a constant.
1098210982

1098310983
##### Reason
1098410984

10985-
A `thread` is a implementation concept, a way of thinking about the machine.
10985+
A `thread` is an implementation concept, a way of thinking about the machine.
1098610986
A task is an application notion, something you'd like to do, preferably concurrently with other tasks.
1098710987
Application concepts are easier to reason about.
1098810988

@@ -11073,7 +11073,7 @@ Concurrency rule summary:
1107311073
* [CP.27: Use plain `std::thread` for `thread`s that detach based on a run-time condition (only)](#Rconc-thread)
1107411074
* [CP.28: Remember to join scoped `thread`s that are not `detach()`ed](#Rconc-join)
1107511075
* [CP.30: Do not pass pointers to local variables to non-`raii_thread's](#Rconc-pass)
11076-
* [CP.31: Pass small amounts of data between threads by value, reather by reference or pointer](#Rconc-data)
11076+
* [CP.31: Pass small amounts of data between threads by value, rather than by reference or pointer](#Rconc-data)
1107711077
* [CP.32: To share ownership beween unrelated `thread`s use `shared_ptr`](#Rconc-shared)
1107811078
* [CP.40: Minimize context switching](#Rconc-switch)
1107911079
* [CP.41: Minimize thread creation and destruction](#Rconc-create)
@@ -11216,7 +11216,7 @@ If, as it is likely, `f()` invokes operations on `*this`, we must make sure that
1121611216

1121711217
##### Reason
1121811218

11219-
To maintain pointer safety and avoid leaks, we need to consider what pointers a used by a `thread`.
11219+
To maintain pointer safety and avoid leaks, we need to consider what pointers are used by a `thread`.
1122011220
If a `thread` joins, we can safely pass pointers to objects in the scope of the `thread` and its enclosing scopes.
1122111221

1122211222
##### Example
@@ -11255,7 +11255,7 @@ After that, the usual lifetime and ownership (for local objects) enforcement app
1125511255

1125611256
##### Reason
1125711257

11258-
To maintain pointer safety and avoid leaks, we need to consider what pointers a used by a `thread`.
11258+
To maintain pointer safety and avoid leaks, we need to consider what pointers are used by a `thread`.
1125911259
If a `thread` is detached, we can safely pass pointers to static and free store objects (only).
1126011260

1126111261
##### Example
@@ -11415,7 +11415,7 @@ A `thread` that has not been `detach()`ed when it is destroyed terminates the pr
1141511415

1141611416
##### Reason
1141711417

11418-
In general, you cannot know whether a non-`raii_thread` will outlife your thread (so that those pointers will become invalid.
11418+
In general, you cannot know whether a non-`raii_thread` will outlive the scope of the variables, so that those pointers will become invalid.
1141911419

1142011420
##### Example, bad
1142111421

@@ -11427,7 +11427,7 @@ In general, you cannot know whether a non-`raii_thread` will outlife your thread
1142711427
t0.detach();
1142811428
}
1142911429

11430-
The detach` may not be so easy to spot.
11430+
The `detach` may not be so easy to spot.
1143111431
Use a `raii_thread` or don't pass the pointer.
1143211432

1143311433
##### Example, bad
@@ -11436,10 +11436,10 @@ Use a `raii_thread` or don't pass the pointer.
1143611436

1143711437
##### Enforcement
1143811438

11439-
Flage pointers to locals passed in the constructor of a plain `thread`.
11439+
Flag pointers to locals passed in the constructor of a plain `thread`.
1144011440

1144111441

11442-
### <a name="Rconc-switch"></a>CP.31: Pass small amounts of data between threads by value, reather by reference or pointer
11442+
### <a name="Rconc-switch"></a>CP.31: Pass small amounts of data between threads by value, rather by reference or pointer
1144311443

1144411444
##### Reason
1144511445

@@ -11448,7 +11448,7 @@ Copying naturally gives unique ownership (simplifies code) and eliminates the po
1144811448

1144911449
##### Note
1145011450

11451-
Defining "small amount" precisely and is impossible.
11451+
Defining "small amount" precisely is impossible.
1145211452

1145311453
##### Example
1145411454

@@ -11463,7 +11463,7 @@ Defining "small amount" precisely and is impossible.
1146311463

1146411464
The call of `modify1` involves copying two `string` values; the call of `modify2` does not.
1146511465
On the other hand, the implementation of `modify1` is exactly as we would have written in for single-threaded code,
11466-
wheread the implementation of `modify2` will need some form of locking to avoid data races.
11466+
whereas the implementation of `modify2` will need some form of locking to avoid data races.
1146711467
If the string is short (say 10 characters), the call of `modify1` can be surprisingly fast;
1146811468
essentially all the cost is in the `thread` switch. If the string is long (say 1,000,000 characters), copying it twice
1146911469
is probably not a good idea.
@@ -11480,7 +11480,7 @@ message passing or shared memory.
1148011480

1148111481
##### Reason
1148211482

11483-
If treads are unrelated (that is, not known to be in the same scope or one within the lifetime of the other)
11483+
If threads are unrelated (that is, not known to be in the same scope or one within the lifetime of the other)
1148411484
and they need to share free store memory that needs to be deleted, a `shared_ptr` (or equivalent) is the only
1148511485
safe way to ensure proper deletion.
1148611486

@@ -11490,7 +11490,7 @@ safe way to ensure proper deletion.
1149011490

1149111491
##### Note
1149211492

11493-
* A static object (e.g. a global) can be shard because it is not owned in the sense that some thread is responsible for it's deletion.
11493+
* A static object (e.g. a global) can be shared because it is not owned in the sense that some thread is responsible for it's deletion.
1149411494
* An object on free store that is never to be deleted can be shared.
1149511495
* An object owned by one thread can be safely shared with another as long as that second thread doesn't outlive the owner.
1149611496

@@ -11503,7 +11503,7 @@ safe way to ensure proper deletion.
1150311503

1150411504
##### Reason
1150511505

11506-
Context swtiches are expesive.
11506+
Context swtiches are expensive.
1150711507

1150811508
##### Example
1150911509

@@ -11562,7 +11562,7 @@ Instead, we could have a set of pre-created worker threads processing the messag
1156211562

1156311563
##### Note
1156411564

11565-
If you system has a good thread pool, use it.
11565+
If your system has a good thread pool, use it.
1156611566
If your system has a good message queue, use it.
1156711567

1156811568
##### Enforcement
@@ -11637,7 +11637,7 @@ it will immediately go back to sleep, waiting.
1163711637

1163811638
##### Enforcement
1163911639

11640-
Flag all `waits` without conditions.
11640+
Flag all `wait`s without conditions.
1164111641

1164211642

1164311643
### <a name="Rconc-time"></a>CP.43: Minimize time spent in a critical section

0 commit comments

Comments
 (0)