【问题标题】:boost::asio strands vs shared mutex'sboost::asio 链与共享互斥锁
【发布时间】:2011-07-22 13:46:13
【问题描述】:

试图决定天气以使用 asio 股线?

我对线程的最大需求是通过多次读取和一次写入来访问数据库。

似乎 strands 一次只允许一个线程,有没有办法使用 strands 进行多读和一次写入?

为什么链比只使用互斥锁更好?

【问题讨论】:

    标签: boost-asio boost-thread


    【解决方案1】:

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

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

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

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

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

    在多线程设计中始终需要格外小心。请务必仔细查看每个线程使用什么/如何使用同步资源,例如上述池。

    【讨论】:

    • 所以基本上股在这里没有帮助?
    • 可以使用它来序列化作者活动,但可能对多个读者没有太大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2021-10-10
    • 2012-06-29
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多