2017-01-31 2 views
1

Ich überarbeite für meine Zwischenprüfung in der gleichzeitigen Programmierung in C und ich bin auf dieser Frage fest.Was wäre der minimale und maximale Wert von int x in diesem Fall?

Sagen Sie bitte die folgende Schleife haben:

int x = 20; 

for (int i = -3; i <= 7; i++) 
    x -= 2; 
} 

Auf einem Monoprozessor-Maschine, was sind die minimal und maximal möglichen Werte für die Variable int x, nachdem sie von 5 Threads gleichzeitig ausgeführt werden?

EDIT: X ist natürlich eine gemeinsame (globale) Variable mit jedem Thread.

+3

Welchen Unterschied würde es für eine Multiprozessor-Maschine machen? –

+1

Ich nehme an, dass die Variable 'x' eine globale Variable wäre, und die Schleife würde in jedem Thread ausgeführt werden? Wenn das so ist, dann sollten Sie es wahrscheinlich in der Frage erwähnen, da es für das vorliegende Problem sehr relevant ist. Und natürlich sag uns, was *** du denkst die Antwort ist, und * warum *. –

+2

Die Frage ist bestenfalls völlig zweideutig. Erstens, ist "x" global? Statisch? Angenommen, 'x' ist eine globale oder statische Variable, ist es unmöglich zu sagen. Es ist * undefiniertes Verhalten *, zum einen. Und wo steht, dass das Lesen oder Schreiben eines "int" -Wertes atomar ist? Wenn der Zugriff auf die Variable nicht atomar ist, kann der endgültige Wert ein Mashup von irgendetwas sein. –

Antwort

7

Das Verhalten des Programms ist undefined aufgrund der Möglichkeit für gleichzeitiges Lesen und Schreiben an x.

Zugang zu x Bedürfnisse durch gegenseitigen Ausschluss gesteuert werden, oder Schritte müssen unternommen werden, um sicherzustellen, dass x -= 2Atom ist. Nur dann können wir über die möglichen Werte sprechen, die x einnehmen können.

+1

In einer Uniprozessor-Maschinenumgebung ist es nicht definiert? –

+0

Der Standard erwähnt diesen Fall nicht, also methinks ja noch. – Bathsheba

+0

Entschuldigung, ich bitte um Unterschiede. Wenn ich das obige Snippet in 'main()' lege, glaube ich, dass es ein ziemlich definiertes Ergebnis haben wird. Bitte sag mir, wenn ich falsch liege. –

Verwandte Themen