cURL è una libreria quasi del tutto thread-safe. Tuttavia è indispensabile prestare attenzione ad alcune cose nello svilupo pena frequenti ed inspiegabili crash dell'applicazione. Le indicazione seguenti sono date nell'ipotesi di lavorare con le curl_easy, tuttavia sono più generalmente valide.
- Prima di tutto è necessario inizializzare la libreria con la funzione curl_global_init(CURL_GLOBAL_ALL) prima della creazione di qualsiasi thread del programma, indipendentemente dal fatto che in uno specifico thread vengano o non vengano utilizzate funzioni cURL.
- Gli handle alla libreria CURL *cl = curl_easy_init(); vanno tenuti locali al singolo thread, non vanno mai dichiarati globali o utilizzati da più thread.
- Prima di eseguire ogni transazione (con curl_easy_perform) e necessario impostare l'opzione CURLOPT_NOSIGNAL ad 1 con la funzione curl_easy_setopt(cl, CURLOPT_NOSIGNAL, 1). Questa operazione comporta una piccola controindicazione: potrebbero non venire più gestiti i timeout di connessione al DNS nella fase di risoluzione dei nomi. Sono possibili due soluzioni a questo problema: la prima e risolvere i nomi con una chiamata esterna alla libreria ed inserire nell'url esclusivamente indirizzi numerici; la seconda e compilare la libreria con il supporto c-ares che assicura una corretta gestione dei timeout.
- Altri problemi possono insorgere nell'uso di comunicazioni cifrate con SSL/TLS (e.g. https). Le librerie openSSL e GnuTLS richiedeno delle specifiche attenzioni per una corretta gestione del multithreading mentre la libreria NSS dovrebbe essere nativamente thread-safe. Per verificare le richieste delle due librerie usate per la cifrartura fare riferimento a questi link: OpenSSL, GnuTLS