Comments (4)
Editors call: Thanks! We agree this would be clearer with a destruction of im
.
from cppcoreguidelines.
@hsutter :
We agree this would be clearer with a destruction of im.
Something like this perhaps?
{
std::shared_ptr<const Image> im { read_image(somewhere) };
std::thread t0 {shade, args0, top_left, image};
std::thread t1 {shade, args1, top_right, image};
std::thread t2 {shade, args2, bottom_left, image};
std::thread t3 {shade, args3, bottom_right, image};
// detach threads
}
// main thread no longer shares ownership
// last thread among t0-t3 to finish deletes the image
or maybe even
{
std::shared_ptr<const Image> image { read_image(somewhere) };
std::thread{shade, args0, top_left, image}.detach();
std::thread{shade, args1, top_right, image}.detach();
std::thread{shade, args2, bottom_left, image}.detach();
std::thread{shade, args3, bottom_right, image}.detach();
}
// main thread no longer shares ownership
// last thread among the four shader threads to finish deletes the image
?
from cppcoreguidelines.
Yes, that's pretty much the direction we had in mind 👍
from cppcoreguidelines.
@hsutter : So, this bug is not actually resolved. After the new commit, the code as written results in std::terminate
being called - as there is now not even a placeholder for the threads getting detached. You're saying that "detaching thread requires care etc." - but the detaching is not said to occur.
This will confuse users (and doubly so if they mistakenly imagine that the destruction involves joining - which they might believe happens; under that mis-perception, the use-case would actually be better served by a plain scoped Image
rather than the shared_ptr. It's better to be extra clear in distinguishing the intended use case from the very-typical false use case for smart pointers.
Bottom line: Please either actually detach (which isn't hard after all), or say the threads get detached, explicitly.
from cppcoreguidelines.
Related Issues (20)
- Practice HOT 1
- #include HOT 1
- How to refer to the guidelines, bibtex preferred? HOT 3
- I.2: Avoid non-const global variables, but exempt "file scope" from this rule HOT 2
- C++ Core Guidelines Markdown to HTML HOT 1
- Why isn't the exception safety mentioned in the Reason of R.22? HOT 4
- C++ Core Guidelines Markdown explicit anchor links not working (updated the 20/05/2024)
- Doesn't the title of ES.3 break that very guideline itself? HOT 2
- Section E.27 HOT 1
- Ceil Function in Cpp HOT 3
- Namespace guidelines HOT 2
- Recommend against using RAII only for release functions that can fail, including all IO HOT 1
- Clarify ES.23: Prefer the {}-initializer syntax HOT 1
- Should ES.23 mention that ()-initialization is likely to be preferrable when dealing with containers containing types initializable from the container itself HOT 5
- Exception to ES.63 for base type without any data member HOT 1
- Discourage implicit casting from/to void pointer HOT 1
- Should SF.7 avoid to limit its applicability to when the directive is at global scope?
- the links in I: Interfaces are all broken HOT 1
- gsl::span UB if used over containers of non-implicit lifetime types? HOT 2
- C.20 - "rule of zero" and constructor handling
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cppcoreguidelines.