我们通常通过为容器加锁来保证容器的线程安全性。
为容器加锁:
多个读取者是安全的。多线程可能同时读取一个容器的内容,这将正确地执行。当然,在读取时不能有任何写入者操作这个容器。
对不同容器的多个写入者是安全的。多线程可以同时写不同的容器。
针对容器的锁实现:
template<typename Container>
class Lock
{
public:
Lock() =delete;
Lock(const Container &container): c(container), released(false){
getMutexFor(c);
}
~Lock(){
if(false == released){
try{
releaseMutexFor(c);
}
catch(...){
}
}
}
void releaseMutex(){
releaseMutexFor(c);
released = true;
}
private:
const Container &c;
bool released;
};