crypto++ 可以同时使用 [Private]key 对象 [在多线程中]
can crypto++ use [Private]key object be used simultaneously [in multi threads]
假设我们有全局 CryptoPP::ECIES<CryptoPP::ECP>::PrivateKey mykey
初始化对象
,并有 10 个线程 运行 CryptoPP::ECIES<CryptoPP::ECP>::Encryptor myencrypto(mykey)
用于通过从 mykey 对象
分配密钥来制作加密器对象
assigner以mykey为参考
我需要一个 Mutex 来确保一次只有一个线程使用 mykey 吗,或者多个线程可以同时从密钥对象分配 enryptor 而没有任何问题(如果是,是否有保证)
(请注意,线程只能同时从 mykey 分配 none 修改它(我的代码不知道 cryptoPP 分配器是否这样做))
在没有收到答复后,我从我的代码中选择了互斥锁并测试了几次
当多线程同时使用 PrivateKey 对象初始化多个加密器时
我在第 2910 行 intger.cpp(cryptoPP 库源文件)
处得到一个断言
CRYPTOPP_ASSERT(bcLen <= N);
测试了大约 10 次,然后进行相同的断言,再次放置互斥锁并且断言消失了(在发布时我在 ntdll.dll 得到 0xc000005(访问被拒绝),因为 HeapFree() 函数是被错误的参数调用
假设我们有全局 CryptoPP::ECIES<CryptoPP::ECP>::PrivateKey mykey
初始化对象
,并有 10 个线程 运行 CryptoPP::ECIES<CryptoPP::ECP>::Encryptor myencrypto(mykey)
用于通过从 mykey 对象
assigner以mykey为参考
我需要一个 Mutex 来确保一次只有一个线程使用 mykey 吗,或者多个线程可以同时从密钥对象分配 enryptor 而没有任何问题(如果是,是否有保证)
(请注意,线程只能同时从 mykey 分配 none 修改它(我的代码不知道 cryptoPP 分配器是否这样做))
在没有收到答复后,我从我的代码中选择了互斥锁并测试了几次 当多线程同时使用 PrivateKey 对象初始化多个加密器时
我在第 2910 行 intger.cpp(cryptoPP 库源文件)
处得到一个断言CRYPTOPP_ASSERT(bcLen <= N);
测试了大约 10 次,然后进行相同的断言,再次放置互斥锁并且断言消失了(在发布时我在 ntdll.dll 得到 0xc000005(访问被拒绝),因为 HeapFree() 函数是被错误的参数调用