Kokujou
Lieutenant
- Registriert
- Dez. 2017
- Beiträge
- 948
Hallo erstmal. Zuerst mein grundsätzlicher Aufbau:
Der Grundaufbau ist sehr simpel. Eigentlich will ich nur mehrere virtuelle Spiele parallel laufen lassen und den Ausgang der Spiele am Ende ausgeben. Allerdings haut das nicht so ganz hin. Es gibt folgende Fehler:
1. Ich schreibe Logs an einen externen Prozess. Allerdings verwendet der komische Zählervariablen. Statt in irgendeiner zufälligen Reihenfolge die Zahlen 1-x auszugeben hab ich mal 3 einsen, mal nur 6en. wenn ich einen lock einbaue ist es noch schlimmer und er gibt immer dieselbe Zahl aus. Gut ich nehme an es liegt daran dass ich in den Outputbuffer parallelisiert schreibe, aber trotzdem.
2. Der Output ist falsch!, wie ihr seht benutze ich die Variable output. In jeder der Iterationen wird der Counter erhöht je nachdem wer das Spiel gewonnen hat. Am Ende füge ich Interlocked die Zahlen zusammen. Jetzt erkläre man mir warum ich da immer nur 1 stehen habe. bei 40 Iterationen müsste ich doch auf die Summe 40 kommen statt auf 1.
C#:
var test = Parallel.For(1, ExecutionTimes + 1, () => new IterationOutput(), (round, state, output) =>
{
return PlayNewGame(output, P1Oya: true);
}, finalOutput =>
{
Interlocked.Add(ref totalOutput.P1Wins, finalOutput.P1Wins);
Interlocked.Add(ref totalOutput.P2Wins, finalOutput.P2Wins);
Interlocked.Add(ref totalOutput.Draws, finalOutput.Draws);
});
Der Grundaufbau ist sehr simpel. Eigentlich will ich nur mehrere virtuelle Spiele parallel laufen lassen und den Ausgang der Spiele am Ende ausgeben. Allerdings haut das nicht so ganz hin. Es gibt folgende Fehler:
1. Ich schreibe Logs an einen externen Prozess. Allerdings verwendet der komische Zählervariablen. Statt in irgendeiner zufälligen Reihenfolge die Zahlen 1-x auszugeben hab ich mal 3 einsen, mal nur 6en. wenn ich einen lock einbaue ist es noch schlimmer und er gibt immer dieselbe Zahl aus. Gut ich nehme an es liegt daran dass ich in den Outputbuffer parallelisiert schreibe, aber trotzdem.
2. Der Output ist falsch!, wie ihr seht benutze ich die Variable output. In jeder der Iterationen wird der Counter erhöht je nachdem wer das Spiel gewonnen hat. Am Ende füge ich Interlocked die Zahlen zusammen. Jetzt erkläre man mir warum ich da immer nur 1 stehen habe. bei 40 Iterationen müsste ich doch auf die Summe 40 kommen statt auf 1.