Ich arbeite derzeit an einer Multi-Thread-Anwendung, die auf Arm-und PPC-Architektur eingesetzt werden würde. Ich habe ein Problem mit pthread_cancel am Arm.pthread_cancel verhält sich auf arm und ppc anders?
pthread_cancel auf Arm verhält sich nicht gleich mit ppc. Der Thread wird abgebrochen, aber der Destruktor für die lokale Variable des Threads wird nicht am Arm aufgerufen. Ich habe auch versucht, eine Stornierungsbereinigungshandlerroutine zu definieren, die über pthread_cleanup_push installiert wurde. Aber es wird nicht aufgerufen, wenn der Thread abgebrochen wird.
Der Code funktioniert gut mit ppc. Wenn ein Thread abgebrochen wird, wird der Destruktor der lokalen Variablen aufgerufen. Und als ich explizit einen Bereinigungs-Handler definiert habe, wurde er aufgerufen und ausgeführt, als pthread_cancel aufgerufen wurde.
Fehle ich etwas? Einige Compiler-Optionen vielleicht?
- Programmiersprache: C++
- Compiler: arm-linux-g ++/powerpc-linux-g ++
- OS: Linux
EDIT:
Ich habe eine Art gefunden ähnliches Problem angemeldet libc bug.
Mit gcc anstelle von g ++ und Hinzufügen-fno-Ausnahme Compiler-Option hat den Trick. Aber ich möchte wirklich Sachen hinter diesem Thema verstehen. Darüber hinaus bedeutet die -fno-Ausnahme, dass ich die Ausnahmebehandlung in meiner Anwendung nicht ausführen kann, nicht, dass ich sie jetzt verwende, aber möglicherweise in der Zukunft.
Danke.
Bitte geben Sie Sprache und Compiler verwendet (für beide Plattformen). Das klingt nach C++, aber es ist besser, explizit zu sein. – unwind
Es würde auch helfen, zu wissen, welches OS als das pthread-Paket oft OS-spezifisch ist. – Benoit
Ich würde auch vorschlagen, die genaue Version des Linux-Kernels aufzuführen, welche Zielplattform-Unterstützung in jedem Fall verwendet wird, und die Versionen von gcc/g ++, libc und anderer involvierter Software. Ohne genaue Versionsnummern ist es ziemlich schwer mit guten Ratschlägen zu kommen. – jakobengblom2