|
Barretenberg
The ZK-SNARK library at the core of Aztec
|
Multi-producer single-consumer - consumer side. More...
#include <mpsc_shm.hpp>
Public Member Functions | |
| MpscConsumer (MpscConsumer &&other) noexcept | |
| MpscConsumer & | operator= (MpscConsumer &&other) noexcept |
| MpscConsumer (const MpscConsumer &)=delete | |
| MpscConsumer & | operator= (const MpscConsumer &)=delete |
| ~MpscConsumer () | |
| int | wait_for_data (uint32_t timeout_ns) |
| Wait for data on any ring. | |
| void * | peek (size_t ring_idx, size_t want, uint32_t timeout_ns) |
| Peek data from specific ring. | |
| void | release (size_t ring_idx, size_t n) |
| Release data from specific ring. | |
| void | wakeup_all () |
| Wake all blocked threads (for graceful shutdown) Wakes consumer blocked on doorbell and all producers blocked on their rings. | |
Static Public Member Functions | |
| static MpscConsumer | create (const std::string &name, size_t num_producers, size_t ring_capacity) |
| Create MPSC consumer. | |
| static bool | unlink (const std::string &name, size_t num_producers) |
| Unlink all shared memory for this MPSC system. | |
Private Member Functions | |
| MpscConsumer (std::vector< SpscShm > &&rings, int doorbell_fd, size_t doorbell_len, MpscDoorbell *doorbell) | |
Private Attributes | |
| std::vector< SpscShm > | rings_ |
| int | doorbell_fd_ = -1 |
| size_t | doorbell_len_ = 0 |
| MpscDoorbell * | doorbell_ = nullptr |
| size_t | last_served_ = 0 |
| bool | previous_had_data_ = false |
Multi-producer single-consumer - consumer side.
Manages multiple SPSC rings (one per producer) and waits on a shared doorbell.
Definition at line 41 of file mpsc_shm.hpp.
|
noexcept |
Definition at line 28 of file mpsc_shm.cpp.
|
delete |
| bb::ipc::MpscConsumer::~MpscConsumer | ( | ) |
Definition at line 68 of file mpsc_shm.cpp.
|
private |
Definition at line 21 of file mpsc_shm.cpp.
|
static |
Create MPSC consumer.
| name | Base name for shared memory objects |
| num_producers | Number of producer rings to create |
| ring_capacity | Capacity for each SPSC ring |
| std::runtime_error | if creation fails |
Definition at line 78 of file mpsc_shm.cpp.
|
delete |
|
noexcept |
Definition at line 41 of file mpsc_shm.cpp.
| void * bb::ipc::MpscConsumer::peek | ( | size_t | ring_idx, |
| size_t | want, | ||
| uint32_t | timeout_ns | ||
| ) |
Peek data from specific ring.
| ring_idx | Ring index |
| want | Minimum bytes required |
| timeout_ns | Timeout in nanoseconds |
Definition at line 246 of file mpsc_shm.cpp.
| void bb::ipc::MpscConsumer::release | ( | size_t | ring_idx, |
| size_t | n | ||
| ) |
Release data from specific ring.
| ring_idx | Ring index |
| n | Bytes to release |
Definition at line 254 of file mpsc_shm.cpp.
|
static |
Unlink all shared memory for this MPSC system.
| name | Base name |
| num_producers | Number of producers |
Definition at line 138 of file mpsc_shm.cpp.
| int bb::ipc::MpscConsumer::wait_for_data | ( | uint32_t | timeout_ns | ) |
Wait for data on any ring.
| timeout_ns | Total timeout in nanoseconds (spins 10ms, then futex waits for remainder) |
Definition at line 151 of file mpsc_shm.cpp.
| void bb::ipc::MpscConsumer::wakeup_all | ( | ) |
Wake all blocked threads (for graceful shutdown) Wakes consumer blocked on doorbell and all producers blocked on their rings.
Definition at line 261 of file mpsc_shm.cpp.
|
private |
Definition at line 103 of file mpsc_shm.hpp.
|
private |
Definition at line 101 of file mpsc_shm.hpp.
|
private |
Definition at line 102 of file mpsc_shm.hpp.
|
private |
Definition at line 104 of file mpsc_shm.hpp.
|
private |
Definition at line 105 of file mpsc_shm.hpp.
|
private |
Definition at line 100 of file mpsc_shm.hpp.