2016-08-14 58 views
0

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

我试图寻找类似的问题,但如果它已经

回答

-1

我认为这取决于你想达到你实现什么之前回答找不到任何东西,对不起。只有一个与大量线程的共享连接将导致线程被阻塞并等待连接可用。这可能会降低性能。如果你有大量的线程,我宁愿创建一个连接池来处理连接的创建,使用和关闭。

+0

我想我会使用one-per-thread方法。谢谢! –

+0

这不是一个答案,而是一个评论。 – Olaf

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。

相关问题