?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
libpq是可重入的并且是線程安全的。另外,在你編譯自己的應(yīng)用代碼時(shí), 可能需要使用額外的編譯器命令行選項(xiàng)。請(qǐng)參考你的系統(tǒng)的文檔獲取有關(guān)如何 編譯多線程應(yīng)用的信息。或者查閱src/Makefile.global, 找PTHREAD_CFLAGS和PTHREAD_LIBS。此功能允許查詢 的libpq的線程安全狀態(tài):
PQisthreadsafe
返回線程的libpq庫(kù)的安全狀況
int PQisthreadsafe();
libpq是線程安全的時(shí),返回1 和如果不是返回0。
一個(gè)現(xiàn)實(shí)是,兩個(gè)線程不能試圖同時(shí)操作同一個(gè)PGconn對(duì)象。特別是, 你不能從不同的線程里通過(guò)同一個(gè)連接對(duì)象發(fā)出并發(fā)的命令。 (如果你需要運(yùn)行并行命令,請(qǐng)使用多個(gè)連接。)
PGresult對(duì)象在創(chuàng)建后是只讀的,因此可以自由地在線程之間傳遞。
過(guò)時(shí)了的函數(shù)PQrequestCancel
和PQoidStatus
都是線程不安全的,
因此不應(yīng)該在一個(gè)多線程的程序里面使用。PQrequestCancel
可以由PQcancel
代替。
PQoidStatus
可以由PQoidValue
代替。
If you are using Kerberos inside your application (in addition to inside
libpq),you will need to do locking around
Kerberos calls because Kerberos functions are not thread-safe. See
functionPQregisterThreadLock
in the
libpqsource code for a way to do cooperative
locking betweenlibpqand your application.
如果在你的應(yīng)用內(nèi)部使用了 Kerberos (而不僅僅是libpq里面),
你就需要在 Kerberos 調(diào)用周圍鎖住,因?yàn)?Kerberos 函數(shù)不是線程安全的。
參閱libpq源代碼里面的PQregisterThreadLock
獲取一個(gè)
在libpq和你的應(yīng)用之間進(jìn)行恰當(dāng)鎖定的方法。
If you experience problems with threaded applications,run the program insrc/tools/threadto see if your platform has thread-unsafe functions. This program is run by configure,but for binary distributions your library might not match the library used to build the binaries. 如果你的線程應(yīng)用有問(wèn)題,那么運(yùn)行一個(gè)在src/tools/thread里的程序, 看看你的平臺(tái)是否有線程安全的函數(shù)。這個(gè)程序由configure運(yùn)行,但如果是二進(jìn)制版本, 你的庫(kù)可能就不能和制作二進(jìn)制的那個(gè)庫(kù)匹配了。