我的数据结构有两个功能:read
和write
。
read
函数在其他线程上运行时,可以调用 read
。但是,如果在任何线程上调用write
,则之后调用的read
函数将暂停。
write
个函数,但在所有其他read
和write
函数结束之前,这些函数会暂停。
在了解了互斥量和信号量之后,我想我会有一个互斥量用于写作。
mutex writing;
每当调用write
时,它都会等到writing
互斥锁空闲。然后锁定它,以便任何后续的write
调用必须等待。但问题出在这里,写作还需要等待所有读者完成。可以有无限的读者,所以使用信号量实际上并不正确,因为它不像只有n
个锁。有无限的锁,write
只能在每个锁返回时继续。
我如何构建这个以便不存在竞争条件?从数百个线程中调用了数百个编写器和读者。