我有以下崩溃的代码。我怀疑这是因为分配了对我有这个问题的堆栈的引用。但我想避免每次都必须堆栈分配互斥锁和范围锁的成本
class Cache {
public:
void createCacheLock(const char* name) {
named_mutex mutex_(open_only, name);
mutex = &mutex_;
scoped_lock<named_mutex> cache_lock_(mutex_, defer_lock);
cache_lock=&cache_lock_ ;
}
void updateCache(const char* name, int newvalue) {
cache_lock->lock() ;
/* Do update work */
cache_lock->unlock() ;
}
private:
named_mutex* mutex ;
scoped_lock<named_mutex>* cache_lock;
}
然后我存在该函数(cache_lock 是一个类字段),当尝试从不同的类方法中调用 cache_lock.lock 时,我的程序崩溃(在这种情况下 updateCache 在 cache_lock->lock() 部分崩溃)
我有两个问题:我怎样才能创建一个“持久的”cache_lock,这样我就可以在不调用named_mutex(open_only等)的情况下重用它?ak 我想避免每次都这样做
void updateCache(const char* name, int newvalue) {
named_mutex mutex_(open_only, name);
scoped_lock<named_mutex> cache_lock_(mutex_, defer_lock);
/* Do update work */
cache_lock->unlock() ;
}
其次,重复上述过程(即找到互斥体并从中创建锁)是一项昂贵的操作?