du übergibst den Parameter ja gar nicht über den Stack. Da es eine globale Variable ist liegt diese nicht auf dem Stack. Aber selbst wenn sie auf dem Stack liegen würde übergibst du sie nicht über den Stack sondern du übergibst ja dem Thread generell nur einen Pointer auf Daten die irgendwo liegen. Und du musst nur dafür sorgen das die Daten worauf der Pointer zeigt auch noch da sind wenn über den Pointer darauf zugegriffen wird.
Dadurch das du auf den thread wartest bis er beendet ist würde der Inhalt auf dem Stack auch unverändert bleiben.
Der Stack wird übrigens nicht vom Betriebssystem aufgeräumt. Je nach Calling Convention wird der Stack dort aufgeräumt wo die Funktion aufgerufen wurde oder eben in der Funktion. Wenn du dir den
asm-code ansiehst wirst du sehen das explizit funktionen aufgerufen werden die den Stack auf- und abbauen.