https://bugzilla.redhat.com/show_bug.cgi?id=2129304
Bug ID: 2129304 Summary: Review Request: moodycamel-readerwriterqueue - A single-producer, single-consumer lock-free queue for C++ Product: Fedora Version: rawhide Hardware: All OS: Linux Status: NEW Component: Package Review Severity: medium Assignee: nobody@fedoraproject.org Reporter: sergey@mende.spb.ru QA Contact: extras-qa@fedoraproject.org CC: package-review@lists.fedoraproject.org Target Milestone: --- Classification: Fedora
Spec: https://download.copr.fedorainfracloud.org/results/snmende/moodycamel-reader... SRPM: https://download.copr.fedorainfracloud.org/results/snmende/moodycamel-reader... Description: A single-producer, single-consumer lock-free queue for C++
This mini-repository has my very own implementation of a lock-free queue (that I designed from scratch) for C++. It only supports a two-thread use case (one consuming, and one producing). The threads can't switch roles, though you could use this queue completely from a single thread if you wish (but that would sort of defeat the purpose!). Note: If you need a general-purpose multi-producer, multi-consumer lock free queue, I have [one of those too][mpmc]. This repository also includes a [circular-buffer SPSC queue][circular] which supports blocking on enqueue as well as dequeue.
Features:
- [Blazing fast][benchmarks] - Compatible with C++11 (supports moving objects instead of making copies) - Fully generic (templated container of any type) -- just like `std::queue`, you never need to allocate memory for elements yourself (which saves you the hassle of writing a lock-free memory manager to hold the elements you're queueing) - Allocates memory up front, in contiguous blocks - Provides a `try_enqueue` method which is guaranteed never to allocate memory (the queue starts with an initial capacity) - Also provides an `enqueue` method which can dynamically grow the size of the queue as needed - Also provides `try_emplace`/`emplace` convenience methods - Has a blocking version with `wait_dequeue` - Completely "wait-free" (no compare-and-swap loop). Enqueue and dequeue are always O(1) (not counting memory allocation) - On x86, the memory barriers compile down to no-ops, meaning enqueue and dequeue are just a simple series of loads and stores (and branches)}
Fedora Account System Username: snmende Build: https://copr.fedorainfracloud.org/coprs/snmende/moodycamel-readerwriterqueue...
https://bugzilla.redhat.com/show_bug.cgi?id=2129304
Sergey sergey@mende.spb.ru changed:
What |Removed |Added ---------------------------------------------------------------------------- Blocks| |2129303, 177841 | |(FE-NEEDSPONSOR)
Referenced Bugs:
https://bugzilla.redhat.com/show_bug.cgi?id=177841 [Bug 177841] Tracker: Review requests from new Fedora packagers who need a sponsor https://bugzilla.redhat.com/show_bug.cgi?id=2129303 [Bug 2129303] Review Request: cbang - The C! or cbang library is a collection of C++ utility libraries
https://bugzilla.redhat.com/show_bug.cgi?id=2129304
Benson Muite benson_muite@emailplus.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Doc Type|--- |If docs needed, set a value CC| |benson_muite@emailplus.org
--- Comment #1 from Benson Muite benson_muite@emailplus.org --- Thanks for this. Any idea on patents? https://moodycamel.com/blog/2013/a-fast-lock-free-queue-for-c++ indicates that though the code is BSD, but that there are many patents in this area, for example https://patents.google.com/patent/US8543743B2/en I expect this only applies to the multi-producer and multi-consumer queue as it is packaged in Debian https://packages.debian.org/source/bullseye/readerwriterqueue
Possibly consider updating the description to (remove "I" which is unclear when not in the repository, and remove external references):
An original implementation of a lock-free queue designed from scratch for C++. It only supports a two-thread use case (one consuming, and one producing). The threads can't switch roles, though you could use this queue completely from a single thread if you wish (but that would sort of defeat the purpose!).
https://bugzilla.redhat.com/show_bug.cgi?id=2129304
Sergey sergey@mende.spb.ru changed:
What |Removed |Added ---------------------------------------------------------------------------- Comment|0 |updated
--- Comment #0 has been edited ---
Spec: https://download.copr.fedorainfracloud.org/results/snmende/moodycamel-reader... SRPM: https://download.copr.fedorainfracloud.org/results/snmende/moodycamel-reader... Description: A single-producer, single-consumer lock-free queue for C++
An original implementation of a lock-free queue designed from scratch for C++. It only supports a two-thread use case (one consuming, and one producing). The threads can't switch roles, though you could use this queue completely from a single thread if you wish (but that would sort of defeat the purpose!).
Features:
- Blazing fast - Compatible with C++11 (supports moving objects instead of making copies) - Fully generic (templated container of any type) -- just like `std::queue`, you never need to allocate memory for elements yourself (which saves you the hassle of writing a lock-free memory manager to hold the elements you're queueing) - Allocates memory up front, in contiguous blocks - Provides a `try_enqueue` method which is guaranteed never to allocate memory (the queue starts with an initial capacity) - Also provides an `enqueue` method which can dynamically grow the size of the queue as needed - Also provides `try_emplace`/`emplace` convenience methods - Has a blocking version with `wait_dequeue` - Completely "wait-free" (no compare-and-swap loop). Enqueue and dequeue are always O(1) (not counting memory allocation) - On x86, the memory barriers compile down to no-ops, meaning enqueue and dequeue are just a simple series of loads and stores (and branches)
Fedora Account System Username: snmende Build: https://copr.fedorainfracloud.org/coprs/snmende/moodycamel-readerwriterqueue...
https://bugzilla.redhat.com/show_bug.cgi?id=2129304
--- Comment #2 from Sergey sergey@mende.spb.ru --- (In reply to Benson Muite from comment #1)
Thanks for this. Any idea on patents? https://moodycamel.com/blog/2013/a-fast-lock-free-queue-for-c++ indicates that though the code is BSD, but that there are many patents in this area, for example https://patents.google.com/patent/US8543743B2/en I expect this only applies to the multi-producer and multi-consumer queue as it is packaged in Debian https://packages.debian.org/source/bullseye/readerwriterqueue
No, Benson, an I have no idea how to proceed. The patent you refer, covers multi-consumer implementation as I got, though looks very similar. Do we have any people who is experienced with this and could help necessary checks?
Possibly consider updating the description to (remove "I" which is unclear when not in the repository, and remove external references):
I updated the spec and rebuild package. The OP is updated.
Sergey
https://bugzilla.redhat.com/show_bug.cgi?id=2129304
Benson Muite benson_muite@emailplus.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Blocks| |182235 (FE-Legal)
--- Comment #3 from Benson Muite benson_muite@emailplus.org --- Thanks for the update. Added legal, can also ask on legal list.
Referenced Bugs:
https://bugzilla.redhat.com/show_bug.cgi?id=182235 [Bug 182235] Fedora Legal Tracker
https://bugzilla.redhat.com/show_bug.cgi?id=2129304
Sergey sergey@mende.spb.ru changed:
What |Removed |Added ---------------------------------------------------------------------------- Blocks|2129303 |
Referenced Bugs:
https://bugzilla.redhat.com/show_bug.cgi?id=2129303 [Bug 2129303] Review Request: cbang - The C! or cbang library is a collection of C++ utility libraries
https://bugzilla.redhat.com/show_bug.cgi?id=2129304
Sergey sergey@mende.spb.ru changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |WONTFIX Status|NEW |CLOSED Last Closed| |2022-11-11 10:26:52
package-review@lists.fedoraproject.org