Unterschied zwischen Reentrant- und Thread-Safe-Funktion

8

Was ist der Unterschied zwischen einer Wiedereintrittsfunktion und einer threadsicheren Funktion?

    
Jay 17.02.2010, 06:49
quelle

3 Antworten

1

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).

    
Brian Rasmussen 17.02.2010, 06:52
quelle
2

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).

    
Mitch Wheat 17.02.2010 06:54
quelle
2
  
  • 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

    
snr 08.12.2016 15:49
quelle

Tags und Links