2 Stimmen

Code-Blöcke und Thread-Priorität

Wenn ich Code in Blöcke einfüge, etwa so:

    {
      f1();
      f2();
    }

Garantiert es, dass diese beiden Funktionen nacheinander von der CPU aufgerufen werden, unabhängig davon, welche anderen Prozesse laufen?

Der Grund, warum ich frage, ist, weil f1, in meinem Fall, etwas mit dem Betriebssystem tut, dann f2 verlässt sich auf die das Betriebssystem in den gleichen Zustand, um richtig zu arbeiten.

Wenn nicht (was ich nicht glaube), gibt es dann irgendein C++-Konstrukt, mit dem ich so etwas machen kann?

Außerdem gebe ich einige Hintergrundinformationen darüber, was in meinem echten Code geschieht:

f1() ist eigentlich eine Funktion, die auf einem Win32-System ein Fenster der obersten Ebene erzeugt. f2() ist eine Funktion, die nach dem Fenster der obersten Ebene sucht (das nicht die Taskleiste ist). Also, meine Sorge ist, dass ich in ein Problem laufen könnte, wobei andere Top-Level-Fenster in der Zeit zwischen erstellt werden können, wenn f1 beendet und f2 noch nicht ausgeführt wurde, in diesem Fall f2 das falsche Fenster finden wird.

0voto

king_nak Punkte 11096

Es ist gewährleistet, dass der Thread, der dies ausführt, zuerst f1 beendet und direkt danach f2 aufruft. Wenn man sich jedoch auf einen Zustand verlässt, der außerhalb des aktuell ausgeführten Threads liegt (eine gemeinsam genutzte OS-Ressource), dann ist nicht garantiert, dass andere Threads/Prozesse/Hardware diese Ressourcen verändern werden, auch während der Ausführung einer dieser Methoden . Dann braucht man eine Art von Sperre, um den Zugriff auf diese Ressource durch andere zu schützen. Wenn sich eine solche Sperre über diesen Block erstreckt, ist auch gewährleistet, dass sie sich zwischen den nachfolgenden Aufrufen nicht ändert.

Je nach Betriebssystem und Ressourcen kann eine solche Sperre vorhanden sein. Dafür gibt es aber zu wenig Informationen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X