【发布时间】:2011-07-22 13:46:13
【问题描述】:
试图决定天气以使用 asio 股线?
我对线程的最大需求是通过多次读取和一次写入来访问数据库。
似乎 strands 一次只允许一个线程,有没有办法使用 strands 进行多读和一次写入?
为什么链比只使用互斥锁更好?
【问题讨论】:
试图决定天气以使用 asio 股线?
我对线程的最大需求是通过多次读取和一次写入来访问数据库。
似乎 strands 一次只允许一个线程,有没有办法使用 strands 进行多读和一次写入?
为什么链比只使用互斥锁更好?
【问题讨论】:
boost strands 序列化所有提供给它们的活动。互斥锁通常用于确保一个线程获得对资源的独占访问权。
问题提到您希望访问具有多个读者和一个作者的数据库。
我会考虑使用数据库连接池设计。连接池通常会让您配置池中有多少连接,并且它具有获取/释放语义。如果连接不可用,池可以返回错误,等待连接返回并变为可用,或增加可用连接数。
可以为读者创建一个连接池。它可以配置为有多个可用连接,以便多个线程可以分别请求一个连接、使用它,然后将其释放回池中。
第二个连接池可用于单个写入器连接。这个池应该只允许一个数据库连接(即单个写入器)。如果某个线程正在使用该连接,则其他线程可以等到该连接被释放并且该连接可用。
在多线程设计中始终需要格外小心。请务必仔细查看每个线程使用什么/如何使用同步资源,例如上述池。
【讨论】: