关于多线程的读写问题,用shared_ptr管理共享数据。
write端,发现引用计数为1,这个时候可以安全的修改数据。
read端,在读之前将引用计数加1,读完之后减1
问题在于在write端,发现引用计数大于1,改怎么处理,一直等着读端完成吗???
共享的数据:::shared_ptr<int> x;
读端:
void read()
{
shared_ptr<int> temp;
mutex.lock();//这个锁是共享的
temp = x;
assert(!x.unique());
mutex.unlock();
print(*temp);
}
写端:
void write()
{
mutex.lock();
if(!x.unique())
{
x.reset(new int(*x));
}
assert(x.unique());
x = 1;
mutex.unlock();
}