OpenSSL и мультипотоки

Я читал о требовании, чтобы, если OpenSSL используется в многопоточном приложении, Вы зарегистрировали идентификационную функцию потока (и также взаимоисключающую функцию создания) с OpenSSL.

На Linux, согласно примеру, обеспеченному OpenSSL, поток обычно определяется путем регистрирования функции как это:

static unsigned long id_function(void){
    return (unsigned long)pthread_self();
}

pthread_self () возвращает pthread_t, и это работает над Linux, так как pthread_t является просто определением типа неподписанных долго.

В Windows pthreads, FreeBSD и другие операционные системы, pthread_t являются структурой со следующей структурой:

struct {
    void * p;                   /* Pointer to actual object */
    unsigned int x;             /* Extra information - reuse count etc */ 
}

Это не может быть просто брошено к неподписанному длинному, и когда я пытаюсь сделать так, это бросает ошибку компиляции. Я пытался брать пустоту *p и бросить это к неподписанному длинному на теории, что указатель памяти должен быть последовательным и уникальным через потоки, но это правые дела моя программа для катастрофического отказа много.

Что я могу зарегистрировать в OpenSSL как идентификационная функция потока при использовании Windows pthreads или FreeBSD или какой-либо из других операционных систем как это?

Кроме того, как дополнительный вопрос:
Кто-либо знает, должно ли это также быть сделано, если OpenSSL компилируется в и используется с QT, и раз так как зарегистрировать QThreads в OpenSSL? Удивительно, я, может казаться, не нахожу ответ в документации QT.

5
задан Nantucket 5 August 2010 в 18:03
поделиться