我想知道哪种方法更好,在一系列o线程之间共享一个odbc连接,使用互斥锁来确保没有并发问题,或者每个线程都有一个而不使用互斥锁。我认为其中任何一个都没有任何实质性优势,但也许odbc实现中有些东西我不见了。
我试图寻找类似的问题但找不到任何内容,抱歉,如果之前已经回答了
答案 0 :(得分:0)
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。
答案 1 :(得分:-1)
我认为这取决于您希望通过实施实现的目标。只有一个与大量线程的共享连接将导致线程被阻塞并等待连接可用。这可能会降低性能。如果你有大量的线程,我宁愿创建一种连接池来处理连接的创建,使用和关闭。