В многопоточном приложении имею следующий эффект.
Если создать HCRYPTPROV с помощью CryptAcquireContext, а затем использовать данный контекст в нескольких нитях одновременно и выполнять операции требующие обращения к закрытому ключу (CryptSignHash или CryptSignMessage) то вне зависимости от числа нитей, которые будут пытаться вычислять подпись, одновременно обращаться к ключу может только одна нить. То есть, на машине с HyperThreading вы получите только 50% загрузки процессора! Такое ощущение, что нить блокирует закрытый ключ (или контекст криптопровайдера) для привелигерованного доступа. Если создать несколько HCRYPTPROV (по количеству нитей), тогда все нормально : нити друг друга не блокируют.
Вопрос в том, можно ли использовать HCRYPTPROV в нескольких нитях и избежать блокировки? Не очень хочется создавать HCRYPTPROV на каждую нить. |