從版本 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 和您的應用程式之間進行協作鎖定的方法。
如果您在文件中發現任何不正確、與特定功能的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。