2015-01-05 2 views

답변

1

내가 전체 응용 프로그램 또는 즉 당 여러 개의 스레드에 대해 하나의 잠금/정리 방법을 정의 하는가?

OpenSSL은 이 아닙니다.은 스레드 로컬 저장소를 사용합니다. 따라서 이 아닌은 스레드별로 잠금을 설치하려고 시도해야합니다.

응용 프로그램과 관련된 잠금을 제공해야합니다.


다음은 관련 소스입니다.

$ grep -R CRYPTO_thread_setup * 
crypto/threads/th-lock.c: * CRYPTO_thread_setup(); 
crypto/threads/th-lock.c:void CRYPTO_thread_setup(void) 
... 

그리고 여기가 (다른 플랫폼에 대한 그들 중 몇 가지가 있습니다) 설정의 한 예입니다 :

static HANDLE *lock_cs; 
... 

void CRYPTO_thread_setup(void) 
    { 
    int i; 

    lock_cs=OPENSSL_malloc(CRYPTO_num_locks() * sizeof(HANDLE)); 
    for (i=0; i<CRYPTO_num_locks(); i++) 
     { 
     lock_cs[i]=CreateMutex(NULL,FALSE,NULL); 
     } 

    CRYPTO_set_locking_callback((void (*)(int,int,char *,int))win32_locking_callback); 
    /* id callback defined */ 
    return(1); 
    } 

사항은 응용 프로그램에 걸쳐 사용되는 잠금 장치의 한 세트가있다.