class Manager {
public:
list<Employee> getEmployees() {
// Do I need to lock here?
return emps_;
}
void addEmp(Employee emp); //Here I have lock
private:
list<Employee> emps_;
};
实例Manager
在多个线程之间共享。我需要给getEmployees
成员函数加锁吗?
我很确定我需要一个锁,因为完整的列表被复制了,所以在此期间进行的任何修改(直到复制完成)都可能破坏复制操作。
我只是问这个,因为我几乎没有意见认为没有必要锁定。
编辑:
既然现在很清楚需要 lock ,我的问题是如何以最小的开销做到这一点。通过执行以下解决方案,您可以复制列表两次。:
list<Employee> getEmployees() {
pthread_mutex_lock( &mutex1 );
list<Emp> tmp = emps_; //Copy 1
pthread_mutex_unlock( &mutex1 );
return tmp;//Copy 2
}