for-Schleife auf 2 Threads aufteilen mit clone
-
Hallo!
Ich soll eine for-Schleife, die einen uint64_t auf 1.000.000.000 inkrementiert, auf zwei Threads aufteilen. Dazu soll clone verwendet werden. Am Ende soll das Ganze das Verhalten von OpenMP imitieren.
Was ich mir bisher überlegt habe:
- Der Originalthread und die beiden anderen Threads benötigen den gleichen Adressraum, um auf die zu inkrementierende Variable zugreifen zu können.
- Dazu braucht clone das Flag CLONE_VMStimmt das soweit?
Meine Implementierung sieht so aus:
- Es gibt eine Funktion "handler", die von clone augerufen werden soll. Handler bekommt einen (void*) übergeben, der dann intern zu einem (uint64_t*) wird. Dieser wird dann in der for-Schleife ein paar mal erhöht (das ist nicht so wichtig), mit
*uint += 1;- clone wird so aufgerufen:
clone(handler, stack, CLONE_VM|CLONE_IO, &uint);
Das ganze 2 Mal in einer for-schleife (soll später dynamisch sein)
Das Problem ist, dass der uint am Ende immer den Wert 0 hat! Egal wieviele Threads ich laufen lasse und wie oft diese jeweils inkrementieren
Auch wenn ich vor dem Auslesen des Wertes sleep(10) mache, erhalte ich die 1.
Kann es sein, dass ich da irgendwas falsch übergeben habe?Die Man-Page habe ich inwischen 2 mal komplett gelesen, aber leider keinen Hinweis gefunden...
Ich würde mich sehr über Hilfe freuen!
Lg
Paul
-
Und noch eine Frage:
Muss ich den mit malloc allokierten Stack wieder free'en oder macht das clone automatisch?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Mal rein prinzipiell: Was genau soll das bringen!? Wie genau stellst du dir das vor, dass zwei Threads die selbe Variable "inkrementieren" und was genau versprichst du dir dabei von Multithreading?