试图决定使用asio股的天气?
我最大的需求是线程正在访问具有多次读取和单次写入的数据库。
看起来像strands一次只允许一个线程,是否有一些方法可以使用strands进行多次读取和一次写入?
为什么股线比使用互斥量好?
答案 0 :(得分:0)
boost strands序列化给予他们的所有活动。互斥体通常用于确保一个线程获得对资源的独占访问权。
该问题提到您希望访问具有多个读者和一个编写者的数据库。
我会考虑使用数据库连接池设计。连接池通常允许您配置池中有多少连接,并且它具有获取/释放语义。如果连接不可用,则池可以返回错误,等待连接返回并变为可用,或者增加可用的连接数。
可以为读者创建一个连接池。它可以配置为具有许多可用连接,以便多个线程可以各自请求连接,使用它,然后将其释放回池中。
第二个连接池可用于单个编写器连接。该池应该只允许一个数据库连接(即单个写入器)。如果某个线程正在使用该连接,则其他线程可以等到该连接被释放后变为可用。
多线程设计总是需要特别小心。请务必仔细查看每个线程使用同步资源的内容/方式,例如上述池。