支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

32.20. 在多執行緒程式中的行為 #

從版本 17 開始,libpq 總是可重入且具備執行緒安全。 然而,一個限制是,沒有兩個執行緒會嘗試同時操作同一個 PGconn 物件。 特別是,您不能從不同的執行緒透過同一個連線物件發出並行命令。(如果您需要執行並行命令,請使用多個連線。)

PGresult 物件在建立後通常是唯讀的,因此可以在執行緒之間自由傳遞。 然而,如果您使用 第 32.12 節第 32.14 節 中描述的任何 PGresult 修改函數,您也有責任避免對同一個 PGresult 進行並行操作。

在較早的版本中,libpq 可以透過編譯器選項來編譯是否支援執行緒。 此函數允許查詢 libpq 的執行緒安全狀態

PQisthreadsafe #

傳回 libpq 程式庫的執行緒安全狀態。

int PQisthreadsafe();

如果 libpq 是執行緒安全的,則傳回 1;如果不是,則傳回 0。 在版本 17 及更高版本上始終傳回 1。

已棄用的函數 PQrequestCancelPQoidStatus 並非執行緒安全,不應在多執行緒程式中使用。 PQrequestCancel 可以由 PQcancelBlocking 取代。 PQoidStatus 可以由 PQoidValue 取代。

如果您在應用程式內部(除了在 libpq 內部之外)使用 Kerberos,您需要在 Kerberos 呼叫周圍進行鎖定,因為 Kerberos 函數不是執行緒安全的。 請參閱 libpq 原始程式碼中的 PQregisterThreadLock 函數,以了解在 libpq 和您的應用程式之間進行協作鎖定的方法。

提交更正

如果您在文件中看到任何不正確、與特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。