我有一个非常简单的共享数据结构,只有一个类,其想法是每个线程在进行更新之前首先获取互斥锁:
class SharedData {
private:
int * score;
int n_loc;
public:
mutex mutex;
SharedData(int n_loc) : n_loc(n_loc) {
score = new int[n_loc];
}
~SharedData() {
delete [] score;
}
void update_score(int * score2) {
for(uint i = 0; i < n_loc; ++i) {
score[i] = score2[i] = max(score[i], score2[i]);
}
}
};
例如,类是否可以处理它自己的互斥锁
void update_score_safe(int * score2, bool force_update = false) {
if(force_update) mutex.lock();
else if(!mutex.try_lock()) return;
update_score(score2);
mutex.unlock();
}
这段代码现在是线程安全的吗?它会阻止任何代码在没有锁定的情况下调用类(假设我会将互斥锁和真正的更新方法设为私有)?