如何声明并插入锁定地图

时间:2016-04-20 23:09:10

标签: c++ multithreading c++11

我有这个非常简单的读写器锁类。我正在尝试创建一个字符串映射和指向这个读者编写器锁的指针。我知道有pthread读写器锁,但这是一个类,我需要自己实现一个。我正在使用c ++ 11线程。

    class ReadersWritersLock{
        private:
        mutex mtx;
        condition_variable_any readers_wait;
        condition_variable_any writers_wait;
        int writers;
        int readers;

        public:
        ReadersWritersLock(){
            writers = 0;
            readers = 0;
        }
        void r_lock(){
            mtx.lock();
            while(writers){
                readers_wait.wait(mtx);
            }
            readers++;
            mtx.unlock();
        }
        void r_unlock(){
            mtx.lock();
            readers--;
            if (!readers)
                writers_wait.notify_one();
            mtx.unlock();
        }
        void w_lock(){
             mtx.lock();
             while (readers + writers > 0){
                 writers_wait.wait(mtx);
             }
             writers++;
             mtx.unlock();
         }
         void w_unlock(){
             mtx.lock();
             writers--;
             if (!readers){
                 writers_wait.notify_one();
             }
             if (readers){
                 readers_wait.notify_all();}
             mtx.unlock();
          }
};

我想做的是在课程结束后立即宣布:

map<string, *ReadersWritersLock> myMap // this doesn't compile

但我得到了:模板参数2无效

然后当我尝试插入一个锁时:

ReadersWritersLock *rwlock = new ReadersWritersLock;
pathnameToLocks["abc"] = rwlock; // this is an doesn't compile

我得到:分配只读位置'“abc”[myMap]' 如果上述操作是非法的,因为我正在处理锁定,是否有解决方法?

0 个答案:

没有答案