Wenn ich mehrere Threads von einem Prozess erstellen, hat dann jeder Thread seinen eigenen Stapel, oder teilen sie sich den Stapel ihres übergeordneten Prozesses. Was passiert, wenn ein Thread einen Systemaufruf tätigt? Behalten Threads auch ihren eigenen Kernel-Stack wie Prozesse?Hat jeder Thread seinen eigenen Stack?
Antwort
Ja-Threads haben ihre eigenen Stacks und ihre eigenen Kernel-Stacks (z. B. Linux).
Wenn ein Thread einen Systemaufruf macht, trapft man in den Kernelmodus (vom Benutzermodus), übergibt die Argumente an den Kernel, die Argumente werden überprüft, der Kernel tut es (im Kernel) stack), gibt den endgültigen Wert zurück an den Thread und Sie kehren zum Benutzermodus zurück.
Wie macht der Kernel "ohne es zu tun" ohne einen Stack? – avakar
Ich werde in meiner Antwort zu klären – Joohwan
Der Kernel-Stack ist nur eine Sicherheitsmaßnahme auf ein bereits vorhandenes Modell hinzugefügt. Mehrere Stacks sind eine Voraussetzung für das Multithreading. Der Kernel bietet im Wesentlichen eine parallele Version dessen, was im Benutzerbereich passiert, um zu verhindern, dass sensible Daten austreten. – Potatoswatter
- 1. Hat jeder verwaltete Thread seinen eigenen entsprechenden nativen Thread?
- 2. Jeder Prozess hat seinen eigenen Kernel-Stack, oder?
- 3. Benötigt jeder Thread seinen eigenen Autorelease-Pool?
- 4. Hat jeder php-fpm Pool seinen eigenen Speicherpool?
- 5. Wie man jeden Thread seinen eigenen RNG in C++ 11
- 6. Bekommt jeder 'HttpRequest' einen eigenen Thread in ASP.NET?
- 7. Hat ein Docker-Container einen eigenen TCP/IP-Stack?
- 8. Wie man auf einen Thread wartet, der seinen eigenen Thread hervorbringt?
- 9. Hat jeder WinRT/Windows Core-Thread einen Dispatcher?
- 10. Jeder leitet Tabelle muss eine eigenen Alias in mysql hat
- 11. Unterschied zwischen "Call Stack" und "Thread Stack"
- 12. Zeige Formular im eigenen Thread
- 13. Ich brauche sowohl Robolectric als auch Mockito in meinem Test, jeder schlägt seinen eigenen TestRunner vor
- 14. Wie man seinen eigenen .net Obfuscator schreibt
- 15. Hat jeder Zweig ein separates Versteck?
- 16. Jeder hat Erfahrung mit AppScale?
- 17. Warum hat Android seinen eigenen Weg, um das aktuelle Gebietsschema zu erhalten?
- 18. .NET Stack vs Windows-Stack
- 19. Hat Stack Iteratoren in C++?
- 20. Java newSingleThreadExecutor vs eigenen Thread mit Warteschlange
- 21. Wie Webanforderung in einem eigenen Thread ausführen?
- 22. Warum kann ein Socket connect() an seinen eigenen ephemeren Port?
- 23. Anfügen eines std :: vector mit seinen eigenen Elementen mit Iteratoren
- 24. Netbeans GUI-Editor generiert seinen eigenen unverständlichen Code
- 25. Wie kann ein Perl-Modul seinen eigenen Weg finden?
- 26. Bereitstellen von QT-Plugin mit seinen eigenen DLL-Funktionen
- 27. ng-Modell kann ich seinen eigenen Wert überprüfen?
- 28. Wie definiere ich seinen eigenen Server mit Rails 3
- 29. Wie kann ein Perl-Skript seinen eigenen Speicherbedarf kennen?
- 30. XDocument get-Element, das seinen eigenen Namespace definiert
ja threadspezifischer Stack !, globale Werte können unter Thread geteilt werden (lokal nicht) –
@GrijeshChauhan Was passiert, wenn wir einen Systemaufruf von einem Thread ausführen? –
zum Beispiel, wenn Sie 'open()' Systemaufruf aufrufen, um eine Datei zu öffnen. mit 'int f = open()' dann ist natürlich 'f' lokal zu thread. Beachten Sie jedoch, dass die Dateideskriptoren zwischen den Threads geteilt werden. Wenn Sie den Wert von "f" kennen, können Sie diesen Wert in einem anderen Thread verwenden, um auf dieselbe Datei zuzugreifen (Sie müssen nicht erneut öffnen). –