Поделиться через


Многопоточность

В многопоточных операционных системах драйверы должны быть потокобезопасными. Таким образом, приложения должны использовать один и тот же дескриптор в нескольких потоках. Как это достигается в зависимости от драйвера, и, скорее всего, драйверы сериализуют любые попытки одновременно использовать один и тот же дескриптор в двух разных потоках.

Приложения обычно используют несколько потоков вместо асинхронной обработки. Приложение создает отдельный поток, вызывает функцию ODBC в ней, а затем продолжает обработку в основном потоке. Вместо того чтобы постоянно опрашивать асинхронную функцию, как и в случае использования атрибута инструкции SQL_ATTR_ASYNC_ENABLE, приложение может просто позволить только что созданному потоку завершить работу.

Функции, принимаюющие дескриптор инструкции и работающие в одном потоке, можно отменить путем вызова SQLCancel с тем же дескриптором инструкции из другого потока. Хотя драйверы не должны сериализовать использование SQLCancel таким образом, нет никакой гарантии, что вызов SQLCancel фактически отменит функцию, запущенную в другом потоке.