Details on lock-free buffer management » History » Version 1

Eric Flumerfelt, 10/15/2018 01:00 PM

1 1 Eric Flumerfelt
h1. Details on lock-free buffer management
2 1 Eric Flumerfelt
3 1 Eric Flumerfelt
The _artdaq_ shared memory interface uses several flags in the buffer descriptor structure to achieve self-contained, lock-free operation. 
4 1 Eric Flumerfelt
5 1 Eric Flumerfelt
# std::atomic<BufferSemaphoreFlags> sem
6 1 Eric Flumerfelt
** The state of the buffer. One of Empty, Writing, Full, or Reading.
7 1 Eric Flumerfelt
# std::atomic<int16_t> sem_id
8 1 Eric Flumerfelt
** The current owner of the buffer. Each instance of SharedMemoryManager takes an ID number (from ShmStruct::std::atomic<int> next_id), and uses this number to indicate that it is the current owner of the buffer. Buffers without owners have sem_id set to -1.
9 1 Eric Flumerfelt
# std::atomic<uint64_t> last_touch_time
10 1 Eric Flumerfelt
** The last time (microseconds, system clock) the buffer was "touched". Buffers should be touched whenever a modifying operation occurs, such as writes or reads, or before the buffer transitions from an inactive state (Empty, Full) to an active state (Writing, Reading).