Hast du den Wiki-Artikel zum Thema gelesen. Es erklärt es gut, bitte sehen Sie das für eine vollständige Diskussion.
Einige relevante Bits aus dem Artikel:
Bei der Berechnung wird ein Computerprogramm oder eine Unterroutine als reentrant bezeichnet, wenn sie mitten in der Ausführung unterbrochen werden kann und dann sicher wieder aufgerufen werden kann ("erneut eingegeben"), bevor die vorherigen Aufrufe die Ausführung abgeschlossen haben. Die Unterbrechung könnte durch eine interne Aktion wie einen Sprung oder einen Anruf oder durch eine externe Aktion wie einen Hardware-Interrupt oder ein Signal verursacht werden. Sobald der Wiedereintritt abgeschlossen ist, werden die vorherigen Aufrufe die korrekte Ausführung fortsetzen.
und
Diese Definition von Reentrancy unterscheidet sich von der Threadsicherheit in Multithread-Umgebungen. Eine Wiedereintritts-Subroutine kann die Thread-Sicherheit erreichen, aber die Wiedereintrittsfähigkeit alleine reicht unter Umständen nicht aus, um in allen Situationen Thread-sicher zu sein. Umgekehrt muss threadsicherer Code nicht unbedingt reentrant sein (Beispiele siehe unten).
Re-entrant bedeutet kein globaler Status (nur lokal).
Thread safe bedeutet, dass zwei (oder mehr) Threads nicht miteinander kollidieren können (indem widersprüchliche Werte geschrieben werden).
Eine
kann gleichzeitig von mehreren aufgerufen werden Threads, auch wenn die Aufrufe gemeinsame Daten verwenden, weil alle Verweise auf die freigegebenen Daten werden serialisiert. Eine Wiedereintrittsfunktion kann kann auch gleichzeitig von mehreren Threads aufgerufen werden, aber nur wenn jeder Aufruf verwendet seine eigenen Daten.
Daher ist eine thread-sichere Funktion immer reentrant, aber ein Reentrant Funktion ist nicht immer Thread-sicher.
Der Unterschied kann mit dem Beispiel aufgegriffen werden,
Eine Klasse wird als reentrant bezeichnet, wenn ihre Elementfunktionen aufgerufen werden können sicher von mehreren Threads, solange jeder Thread einen anderen verwendet Instanz der Klasse. Die Klasse ist Thread-sicher, wenn ihr Mitglied ist Funktionen können sicher aus mehreren Threads aufgerufen werden, auch wenn alle Threads verwenden dieselbe Instanz der Klasse.
Quelle: Qt
Tags und Links c multithreading