# 34.20.线程程序中的行为
默认情况下,libpq是可重入且线程安全的。编译应用程序代码时,可能需要使用特殊的编译器命令行选项。有关如何构建支持线程的应用程序的信息,请参阅系统文档,或查看src/Makefile。全球的
对于PTHREAD_CFLAGS
和PTHREAD_LIBS
.此功能允许查询libpq的线程安全状态:
返回libpq库的线程安全状态。
int PQisthreadsafe();
如果libpq是线程安全的,则返回1,如果不是,则返回0.
一个线程限制是没有两个线程试图操作同一个线程PGconn
对象的同时。特别是,不能通过同一连接对象从不同线程发出并发命令。(如果需要运行并发命令,请使用多个连接。)
PGresult
对象在创建后通常是只读的,因此可以在线程之间自由传递。但是,如果您使用PGresult
-修改中描述的函数第34.12节或第34.14节,这取决于您如何避免在同一台计算机上执行并发操作PGresult
也
不推荐使用的函数请求取消
和状态
不是线程安全的,不应在多线程程序中使用。请求取消
可以替换为取消
. 状态
可以替换为pq值
.
如果在应用程序中使用Kerberos(除了在libpq中),则需要对Kerberos调用进行锁定,因为Kerberos函数不是线程安全的。参见函数PQregisterThreadLock
在libpq源代码中提供了一种在libpq和应用程序之间执行协作锁定的方法。