Sto riscontrando dei problemi con risultati apparentemente errati da pthread_getspecific
in una libreria progettata per collegarsi a varie app iOS.Come eseguire una solida archiviazione locale dei thread in iOS
vedo che Apple writes:
Cacao e POSIX memorizzare il dizionario filo in modi diversi, quindi non è possibile combinare le chiamate verso le due tecnologie. Finché si rimane con una tecnologia all'interno del codice del thread, tuttavia, i risultati finali dovrebbero essere simili. In Cocoa, si utilizza il metodo threadDictionary di un oggetto NSThread per recuperare un oggetto NSMutableDictionary, al quale è possibile aggiungere qualsiasi chiave richiesta dal thread. In POSIX, si utilizzano le funzioni pthread_setspecific e pthread_getspecific per impostare e ottenere le chiavi e i valori del thread.
Questo significa che né le funzioni di cacao né POSIX TLS possono essere tenuti a lavorare in codice della libreria, quando non sappiamo se il codice che ci chiama sta già usando uno o l'altro?
Come si può memorizzare e recuperare un puntatore locale del filo in modo affidabile in queste circostanze?
Esiste un'API di supporto Darwin TLS nativa che dovremmo utilizzare al posto di Cocoa o POSIX?
** Risolto **: i sintomi che inizialmente mi hanno fatto sospettare un malfunzionamento di pthread_getspecific si sono rivelati causati da puntatori penzolanti lasciati da una condizione di competizione non correlata altrove nel programma. –