32.20. Поведение в многопоточных программах #

Начиная с 17-й версии, библиотека libpq всегда поддерживает повторные вызовы и многопоточность. Однако эта реализация не лишена ограничений: два потока не должны пытаться одновременно работать с одним объектом PGconn. В частности, не допускается параллельное выполнение команд из разных потоков через один объект соединения. (Если вам нужно выполнять команды одновременно, используйте несколько соединений.)

Объекты PGresult после создания обычно доступны только для чтения, и поэтому их можно свободно передавать между потоками. Однако если вы используете какую-либо из функций, изменяющих PGresult, описанных в Разделе 32.12 или Разделе 32.14, вы должны также избегать одновременных обращений к одному объекту PGresult.

В ранних версиях библиотеку libpq можно было собрать с поддержкой многопоточности или без неё, в зависимости от параметров компилятора. Эта функция позволяет узнать, поддерживает ли libpq многопоточность:

PQisthreadsafe #

Возвращает состояние потокобезопасности в библиотеке libpq.

int PQisthreadsafe();

Возвращает 1, если библиотека libpq потокобезопасная, или 0 в противном случае. Начиная с версии 17, всегда возвращает 1.

Устаревшие функции PQrequestCancel и PQoidStatus не являются потокобезопасными и не должны применяться в многопоточных программах. Вместо PQrequestCancel можно использовать PQcancelBlocking, а вместо PQoidStatusPQoidValue.

Если протокол Kerberos применяется в пользовательском приложении (помимо возможного использования внутри libpq), необходимо обеспечить блокировку вокруг вызовов Kerberos, так как его функции не являются потокобезопасными.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy