static pthread_mutex_t *crypto_lock = NULL;
static pthread_t pthread_id_cb()
{
return pthread_self();
}
static void pthread_locking_cb(int mode, int n, const char *file, int line)
{
if(mode & CRYPTO_LOCK)
pthread_mutex_lock(&crypto_lock[n]);
else
pthread_mutex_unlock(&crypto_lock[n]);
}
int pthread_setup()
{
int loop = 0;
crypto_lock = (pthread_mutex_t*)OPENSSL_malloc(CRYPTO_num_locks()*sizeof(pthread_mutex_t));
if(!crypto_lock)
return 0;
for(loop = 0; loop < CRYPTO_num_locks(); loop ++)
pthread_mutex_init(&crypto_lock[loop], NULL);
CRYPTO_set_id_callback(pthread_id_cb);
CRYPTO_set_locking_callback(pthread_locking_cb);
return 1;
}
int pthread_cleanup()
{
int loop = 0;
if(!crypto_lock)
return 0;
CRYPTO_set_id_callback(NULL);
CRYPTO_set_locking_callback(NULL);
for(loop = 0; loop < CRYPTO_num_locks(); loop ++)
pthread_mutex_destroy(&crypto_lock[loop]);
OPENSSL_free(crypto_lock);
crypto_lock = NULL;
return 1;
}
OpenSSL多线程互斥锁
最新推荐文章于 2022-02-21 20:11:04 发布
本文介绍了一个使用OpenSSL库中的多线程锁机制的具体实现。通过定义静态的pthread_mutex_t数组作为锁,并初始化这些锁,实现了对OpenSSL内部资源的安全并发访问。此外,还提供了设置回调函数的方法,用于获取当前线程ID以及锁定和解锁相应的锁。
2254

被折叠的 条评论
为什么被折叠?



