支援的版本:目前 (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 和您的應用程式之間進行協作鎖定的方法。

提交更正

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