Attualmente sto lavorando a un'applicazione multi-thread che verrebbe distribuita su arm e su architettura ppc. Sto avendo qualche problema con pthread_cancel al braccio.pthread_cancel si comporta diversamente su arm e ppc?
pthread_cancel sul braccio non si comporta allo stesso modo con ppc. Il thread viene annullato ma il distruttore per la variabile locale del thread non viene chiamato sul braccio. Ho anche provato a definire in modo esplicito una routine di cancellazione cleanup installata tramite pthread_cleanup_push. Ma non viene chiamato quando il thread viene annullato.
Il codice funziona correttamente con ppc. Quando un thread viene cancellato, viene chiamato il distruttore della variabile locale. E quando ho definito esplicitamente un gestore di cleanup, è stato chiamato ed eseguito quando è stato chiamato pthread_cancel.
Mi manca qualcosa? Alcune opzioni del compilatore forse?
- linguaggio di programmazione: C++
- compilatori: arm-linux-g ++/PowerPC-linux-g ++
- SO: Linux
EDIT:
ho trovato una sorta di problema analogo registrato su questo libc bug.
Utilizzare gcc invece di g ++ e l'aggiunta dell'opzione del compilatore -fno-exception ha fatto il trucco. Ma voglio davvero capire le cose dietro a questo problema. Inoltre, il -fno-exception significa che non sarò in grado di eseguire la gestione delle eccezioni nella mia applicazione, non che lo sto usando ora, ma potrei esserlo in futuro.
Grazie.
Specificare la lingua e i compilatori utilizzati (per entrambe le piattaforme). Sembra il C++, ma è meglio essere espliciti. – unwind
Sarebbe anche utile sapere quale sistema operativo come pacchetto pthread è spesso specifico per il sistema operativo. – Benoit
Vorrei anche suggerire di elencare la versione esatta del kernel Linux, che ha come target il supporto della piattaforma utilizzato in ciascun caso, e le versioni di gcc/g ++, libc e qualsiasi altro software coinvolto. Senza numeri di versione precisi è piuttosto difficile venire con buoni consigli. – jakobengblom2