boost :: asio strands vs shared mutex's

时间:2011-03-24 23:56:39

标签: boost-asio boost-thread

试图决定使用asio股的天气?

我最大的需求是线程正在访问具有多次读取和单次写入的数据库。

看起来像strands一次只允许一个线程,是否有一些方法可以使用strands进行多次读取和一次写入?

为什么股线比使用互斥量好?

1 个答案:

答案 0 :(得分:0)

boost strands序列化给予他们的所有活动。互斥体通常用于确保一个线程获得对资源的独占访问权。

该问题提到您希望访问具有多个读者和一个编写者的数据库。

我会考虑使用数据库连接池设计。连接池通常允许您配置池中有多少连接,并且它具有获取/释放语义。如果连接不可用,则池可以返回错误,等待连接返回并变为可用,或者增加可用的连接数。

可以为读者创建一个连接池。它可以配置为具有许多可用连接,以便多个线程可以各自请求连接,使用它,然后将其释放回池中。

第二个连接池可用于单个编写器连接。该池应该只允许一个数据库连接(即单个写入器)。如果某个线程正在使用该连接,则其他线程可以等到该连接被释放后变为可用。

多线程设计总是需要特别小心。请务必仔细查看每个线程使用同步资源的内容/方式,例如上述池。