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
メンバー関数にロックを追加する必要がありますか?
完全なリストがコピーされるので、ロックが必要だと確信しています。そのため、その間に(コピーが完了するまで)行われる変更は、コピー操作を中断する可能性があります。
ロックする必要がないという意見がほとんどなかったので、私はこれを尋ねています。
編集:
ロックする必要があることが明らかになったので、私の質問は、最小限のオーバーヘッドでこれを行う方法です。以下の解決策を実行することにより、リストを2回コピーします。
list<Employee> getEmployees() {
pthread_mutex_lock( &mutex1 );
list<Emp> tmp = emps_; //Copy 1
pthread_mutex_unlock( &mutex1 );
return tmp;//Copy 2
}