C++ 线程安全PQconn对象

C++ 线程安全PQconn对象,c++,multithreading,postgresql,libpq,C++,Multithreading,Postgresql,Libpq,我想跨多个线程访问PostgreSQL表。在多线程处理时如何保护PQconn*对象?库是否提供了解决此问题的方法?到PostgreSQL的单个连接不支持同时查询。当查询处于活动状态时,除了可以从另一个线程或信号处理程序调用的PQcancel(),不可能将其PGconn结构重新用于任何其他内容 这来自客户机-服务器协议的设计,而不是libpq本身 要在多个线程内实现并发查询,每个线程必须有自己的连接和相应的非共享PGconn结构。即使每个线程有单独的PGconn,所有线程都将同时访问单个共享表。因

我想跨多个线程访问PostgreSQL表。在多线程处理时如何保护PQconn*对象?库是否提供了解决此问题的方法?

到PostgreSQL的单个连接不支持同时查询。当查询处于活动状态时,除了可以从另一个线程或信号处理程序调用的
PQcancel()
,不可能将其
PGconn
结构重新用于任何其他内容

这来自客户机-服务器协议的设计,而不是libpq本身


要在多个线程内实现并发查询,每个线程必须有自己的连接和相应的非共享PGconn结构。

即使每个线程有单独的PGconn,所有线程都将同时访问单个共享表。因此,并发查询将产生不希望的结果,不是吗?在这种情况下,如何跨线程管理共享表?这取决于访问的类型。如果是只读的,没问题。如果没有,请应用,您必须选择最适合您需要的隔离级别,并处理db引擎本身无法解决的冲突。