從版本 17 開始,libpq 總是可重入且具備執行緒安全。 然而,一個限制是,沒有兩個執行緒會嘗試同時操作同一個 PGconn
物件。 特別是,您不能從不同的執行緒透過同一個連線物件發出並行命令。(如果您需要執行並行命令,請使用多個連線。)
PGresult
物件在建立後通常是唯讀的,因此可以在執行緒之間自由傳遞。 然而,如果您使用 第 32.12 節 或 第 32.14 節 中描述的任何 PGresult
修改函數,您也有責任避免對同一個 PGresult
進行並行操作。
在較早的版本中,libpq 可以透過編譯器選項來編譯是否支援執行緒。 此函數允許查詢 libpq 的執行緒安全狀態
PQisthreadsafe
#傳回 libpq 程式庫的執行緒安全狀態。
int PQisthreadsafe();
如果 libpq 是執行緒安全的,則傳回 1;如果不是,則傳回 0。 在版本 17 及更高版本上始終傳回 1。
已棄用的函數 PQrequestCancel
和 PQoidStatus
並非執行緒安全,不應在多執行緒程式中使用。 PQrequestCancel
可以由 PQcancelBlocking
取代。 PQoidStatus
可以由 PQoidValue
取代。
如果您在應用程式內部(除了在 libpq 內部之外)使用 Kerberos,您需要在 Kerberos 呼叫周圍進行鎖定,因為 Kerberos 函數不是執行緒安全的。 請參閱 libpq 原始程式碼中的 PQregisterThreadLock
函數,以了解在 libpq 和您的應用程式之間進行協作鎖定的方法。
如果您在文件中看到任何不正確、與特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。