【问题标题】:ODBC single connection or one per threadODBC 单连接或每个线程一个
【发布时间】:2025-12-22 07:35:06
【问题描述】:

我想知道哪种方法更好,在一系列 o 线程之间共享一个 odbc 连接,使用互斥锁来确保没有并发问题,或者每个线程都有一个而不使用互斥锁。我没有看到任何实质性优势,但也许 odbc 实现中我缺少一些东西。

我试图寻找类似的问题,但找不到任何东西,如果之前已经回答过,对不起

【问题讨论】:

    标签: c odbc mutex


    【解决方案1】:

    ODBC 驱动程序管理器已提供连接池:https://msdn.microsoft.com/en-us/library/ms716319(v=vs.85).aspx

    连接池使应用程序可以使用来自 每次使用都不需要重新建立的连接池。

    简而言之:如果您的应用程序释放了连接,并且启用了连接池,驱动程序管理器可能不会立即关闭连接,而是将其保持打开一段时间。如果您的应用程序请求打开一个新连接,驱动程序管理器可能会从其池中返回这样一个已经打开的连接。

    所以:我不关心在你的线程中做所有的锁定,而只是启用连接池并让每个驱动程序使用它自己的连接。

    请注意,您可以在进程级别或为每个环境句柄启用连接池 - 请参阅文档中的备注:

    通过调用 SQLSetEnvAttr 来设置连接池 SQL_ATTR_CONNECTION_POOLING 环境属性到 SQL_CP_ONE_PER_DRIVER 或 SQL_CP_ONE_PER_HENV。

    【讨论】:

      【解决方案2】:

      我认为这取决于您希望通过实施实现什么。与许多线程只有一个共享连接将导致线程被阻塞并等待连接可用。这会降低性能。如果你有大量线程,我宁愿创建一种连接池来处理连接的创建、使用和关闭。

      【讨论】:

      • 这不是答案,而是评论。