我有一个对象A,其中包含一堆需要同步的字段。我想强制执行以下属性:
1)一个以上的线程可以一次读取对象的字段。 2)如果至少有一个线程正在从对象读取,则无法修改该对象。 3)如果正在修改对象,则没有线程可以从对象中读取。
换句话说,我想要一个锁,这样,任何数量的读者都可以持有锁。但是,如果任何作家持有锁,那么其他任何东西都无法锁定。
我该怎么做?我使用C ++,但我希望应该有一种与语言无关的方法。
答案 0 :(得分:1)
您正在寻找的概念是Readers-Writer-Lock。那里有C ++实现,最着名的是boost::thread中的一个。这个想法是你使用单个(逻辑的,通常在内部使用两个互斥锁实现)互斥进行读写,你可以升级到需要独特的锁定(当你写的时候),并且多个读者可以在读取时同时锁定。