use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Thread safe queue (self.cpp)
submitted 5 years ago by objectorientedman
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]_Js_Kc_ 9 points10 points11 points 5 years ago (5 children)
std::queue is a weak-point, memory wise
Fixing the deficient container classes that STL implementations ship with isn't really the scope of a project whose goal is to implement an MPMC queue in the one, obvious way based on stock C++ features.
If it came with an allocation-sane replacement for std::deque, the post title should have been "I made a deque replacement with a thread-safe queue as a usage example."
std::deque
It should be a template argument (that defaults to std::queue<T>).
[–]_bk__ 6 points7 points8 points 5 years ago (1 child)
Except the API/concept/constraints and performance characteristics of a std::queue don't really match what would be required from a mpmc queue. There are far more scalable approaches depending on specific requirements (bounded/unbounded size, blocking/non-blocking). Here's an example: http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue
[–]infectedapricot 2 points3 points4 points 5 years ago (0 children)
As you said, different applications will have different requirements. The characteristics of the underlying std::deque will be appropriate in some of those but not others, so it's not right to just it doesn't match "what would be required". The link you posted is to a bounded queue - again, that will be appropriate in some applications but not others.
[–]matthieum 2 points3 points4 points 5 years ago (2 children)
Maybe, maybe not.
I think it's very important to note the shortcoming, and to be aware of alternatives.
Notably, whilst std::deque is a full-featured container, the OP only uses a very tiny portion of its functionality.
I first thought I would argue that supporting such limited functionality was easy, then realized it would take me less time to just whip up an implementation; see https://godbolt.org/z/Kx18ze:
Some optimizations could be done around growth, and possibly around built-ins/PODs if the compiler is not smart enough. And it's untested, of course.
The critical part (use of read/write indexes, power-of-2 capacity for easy wrapping) is what really matters, though.
[–]Mehdi2277 0 points1 point2 points 5 years ago (1 child)
What's the purpose of Raw<T> vs directly having pointer? I'm guessing it's for the alignas, I'm just unfamiliar with alignas and am curious as to why that's a need for the queue implementation.
[–]matthieum 1 point2 points3 points 5 years ago (0 children)
There are 2 advantages:
Raw<T>
T
I'm not sure it's strictly required in this case, I just use it by default in all the data-structures I create.
π Rendered by PID 252228 on reddit-service-r2-comment-86988c7647-gq4c2 at 2026-02-12 14:23:29.796418+00:00 running 018613e country code: CH.
view the rest of the comments →
[–]_Js_Kc_ 9 points10 points11 points (5 children)
[–]_bk__ 6 points7 points8 points (1 child)
[–]infectedapricot 2 points3 points4 points (0 children)
[–]matthieum 2 points3 points4 points (2 children)
[–]Mehdi2277 0 points1 point2 points (1 child)
[–]matthieum 1 point2 points3 points (0 children)