da scheint Assembler drinn zu sein, das ich nicht kann. Aber ich vermute es ist ähnlich wie ich es mache nur halt in PB.
Code: Alles auswählen
If AktuellerPort > #maxPort
ThreadCount-1
Pure_LeaveCS(CS) ;<- WICHTIG! Sonst warten die anderen Threads unendlich
ProcedureReturn 1
EndIf
LokalerPort = AktuellerPort
AktuellerPort+1
Pure_LeaveCS(CS)
Ich habe das zwar auch nur in PB, aber da muß ich ja aufpassen das das setzten des "Warteflags", so will ich es mal nennen, auch nicht gleichzeitig von zwei Thread gesetzt wird, daher macht dies ein extra Thread, der als einziger "Schreibrechte" darauf hat. Ist also nicht so schön und einfach wie hier. Ich vermute mal, das Assembler so direkt am System ist, das es hier keine Syncronisationsprobleme gibt, da immer nur "einer" zugriff auf den Speicher haben kann / darf oder es keine Thread im PB-sinne gibt. Aber das ist nur so ne vermutung ich würde es gerne erklärt haben. Ich will ja lernen.
[edit]
Habe noch gleich ne Frage.
Wie verhält sich dieser Assemblercode (wenn es denn welcher ist)? So wie PB code, da ja auch soweit ich gelesen haben in Assembler (ASM) umgesetzt wird? Wenn dieser Code nun einfach normal mit jedem Thread ausgeführt wird, kann dann nicht auch theoretisch gleichzeitig (ich meine jetzt nicht diese Beispiel) von 2 Thread in den selben (ASM)Speicher(Variable) geschrieben werden?
Wenn ich das richtig verstehe wird mit z.B. *PCS\Cnt=0 der Wert NULL gespeichert. Wenn dieser Wert nun durch den Assemblercode auf EINS gesetzt wird und gehen wir mal davon aus, das mehrere Thread mit dem selben ASM code diesen Wert gleichzeitig setzen wollen, hier auch der Speicher gleichzeitig genutzt werden könnte (wenn man mal die überprüfung durch die warteschleife wegläßt). nur ob es möglich wäre?
Gruß
Toshy