diff --git a/include/user/sequenceLock.h b/include/user/sequenceLock.h deleted file mode 100644 index 118e541..0000000 --- a/include/user/sequenceLock.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef _SEQUENCE_LOCK_H -#define _SEQUENCE_LOCK_H - -#include -#include - -namespace smo { - -/** - * @brief Sequence lock synchronization primitive - * - * A reader-writer synchronization primitive where writers increment the - * sequence number (odd = writing in progress, even = stable) and readers - * check the sequence number to detect concurrent modifications. - */ -class SequenceLock -{ -public: - SequenceLock() - : sequenceNo(0) - {} - - ~SequenceLock() = default; - - // Non-copyable, non-movable (std::atomic is neither copyable nor movable) - SequenceLock(const SequenceLock&) = delete; - SequenceLock& operator=(const SequenceLock&) = delete; - SequenceLock(SequenceLock&&) = delete; - SequenceLock& operator=(SequenceLock&&) = delete; - - /* Atomically increments sequenceNo and issues a release barrier. - * Makes the sequence number odd, indicating a write is in progress. - */ - void writeAcquire() - { sequenceNo.fetch_add(1, std::memory_order_release); } - - /* Atomically increments sequenceNo and issues a release barrier. - * Makes the sequence number even again, indicating write is complete. - */ - void writeRelease() - { sequenceNo.fetch_add(1, std::memory_order_release); } - - /* Issues an acquire barrier and checks if the sequence number is even - * (stable state). If odd (writer active), returns nullopt. Otherwise - * returns the sequence number. - * - * @return std::nullopt if writer is active, otherwise the sequence number - */ - std::optional readAcquire() - { - size_t seq = sequenceNo.load(std::memory_order_acquire); - if (seq & 1) { - return std::nullopt; - } - return seq; - } - - /* Issues an acquire barrier and checks if the sequence number matches - * the original value from readAcquire(). If equal, the read was consistent. - * - * @param originalSequenceNo The sequence number obtained from readAcquire() - * @return true if read was consistent, false if writer modified during read - */ - bool readRelease(size_t originalSequenceNo) - { - size_t seq = sequenceNo.load(std::memory_order_acquire); - return seq == originalSequenceNo; - } - -private: - std::atomic sequenceNo; -}; - -} // namespace smo - -#endif // _SEQUENCE_LOCK_H diff --git a/include/user/spMcRingBuffer.h b/include/user/spMcRingBuffer.h index d4bb6d5..d2eb563 100644 --- a/include/user/spMcRingBuffer.h +++ b/include/user/spMcRingBuffer.h @@ -7,9 +7,9 @@ #include #include #include +#include #include #include -#include #include #define CL_TARGET_OPENCL_VERSION 120 #include @@ -91,7 +91,7 @@ public: return slots[slotIndex]; } - SequenceLock& getSequenceLockAtSlot(size_t slotIndex) + sscl::SequenceLock& getSequenceLockAtSlot(size_t slotIndex) { if (slotIndex >= nBuffers) { @@ -146,7 +146,7 @@ private: std::shared_ptr frameAssemblyDesc; // Frames vector: each frame contains a sequence lock and SlotDesc std::vector slots; - SequenceLock producerNextUsableIndexLock; + sscl::SequenceLock producerNextUsableIndexLock; size_t producerNextUsableIndex; }; diff --git a/include/user/stimulusFrame.h b/include/user/stimulusFrame.h index aed590f..6113abd 100644 --- a/include/user/stimulusFrame.h +++ b/include/user/stimulusFrame.h @@ -3,8 +3,8 @@ #include #include +#include #include -#include #include #include #define CL_TARGET_OPENCL_VERSION 120 @@ -110,7 +110,7 @@ public: StimulusFrame& operator=(StimulusFrame&&) = default; public: - SequenceLock lock; + sscl::SequenceLock lock; SimultaneityStamp simultaneityStamp; FrameAssemblyDesc::SlotDesc slotDesc; std::shared_ptr clBuffer; diff --git a/libspinscale b/libspinscale index 1309210..e77ecd4 160000 --- a/libspinscale +++ b/libspinscale @@ -1 +1 @@ -Subproject commit 130921062c9895cabe8f03261aa984f8001c6ba8 +Subproject commit e77ecd447d798eb1d1d0069a6f4f09552ff5aa74