Boost logo

Boost Users :

From: Selçuk Giray Özdamar (selcukgiray_at_[hidden])
Date: 2008-06-09 09:19:43


Hi everyone,
I specialized the boost::circular_buffer template class for concurrent
access. But I have no idea about how the locking strategy must be for copy
ctor, and also assignment operator. I inserted question marks at the end of
the related lines.
Thanks in advance...

    template <class T>
    class CircularBuffer
    {
        typedef boost::circular_buffer<T> internal_buffer;

        typedef boost::shared_mutex ReadWriteMutex;
        typedef boost::shared_lock<boost::shared_mutex> ReadLock;
        typedef boost::unique_lock<boost::shared_mutex> WriteLock;

    public:
        // Constructors
        explicit CircularBuffer(capacity_type capacity = 10)
            : m_capacity(capacity)
            , m_buffer(capacity)
        {
        }

        // copy ctor
        CircularBuffer(const CircularBuffer& other)
        {
            //WriteLock w_lock(rw_mutex); ???????????
            m_capacity = other.m_capacity;
            m_buffer = other.m_buffer;
        }

        size_type size() const
        {
            ReadLock r_lock(rw_mutex);
            return m_buffer.size();
        }

        void push_back(param_value_type item = value_type())
        {
            WriteLock w_lock(rw_mutex);
            m_buffer.push_back(item);
        }

        // assignment operator
        CircularBuffer& operator= (const CircularBuffer& other)
        {
            //WriteLock w_lock(rw_mutex); ??????????

            if (this != &other)
            {
                m_capacity = other.m_capacity;
                m_buffer = other.m_buffer;
            }

            return *this;
        }

    private:// member variables
        capacity_type m_capacity;

        internal_buffer m_buffer;

        // rw_mutex for internal buffer
        mutable ReadWriteMutex rw_mutex;
    };



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net