我有这个非常简单的读写器锁类。我正在尝试创建一个字符串映射和指向这个读者编写器锁的指针。我知道有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]' 如果上述操作是非法的,因为我正在处理锁定,是否有解决方法?