create thread, ThreadProc funktionen



  • werden wenn man 2 verschiedene Threads hat die Funktionen die man definiert auch unique?
    zb zwei Threads verwenden die ThreadFunktion Common(LPVOID lParam) wird die funktion für jeden Thread Extra compiliert oder arbeitet der Process für beide Threads dieselbe Speicherstelle ab?



  • Hallo,

    die "Thread-Funktion" liegt nur in einer kompilierten "Version" vor, entscheidend ist hier nur, dass jeder Thread mit eigenen lokalen Variablen arbeitet, so dass diese sich gegenseitig nicht "stören" würden.

    MfG,

    Probe-Nutzer



  • Kurz: Threads teilen sich sämtlichen Speicher des Prozesses. Damit es zu keinen Nebenläufigkeitsproblemen kommt, kann man auf Mutexe, Semaphore oder andere Locking-Methoden zurückgreifen oder stumpf unterschiedliche Variablen (bzw Objektinstanzen) verwenden.



  • also würde die funktion Common anderselben speicherstelle des geladenen Processes liegen?

    zb :
    EntryPoint der Funktion Common ist
    100h für Thread 1;
    und im selben gelanden Process
    100h für Thread 2;

    wär das so zu verstehen?

    assembler (pseudocode):
    start Common: offset: 100h
    mov ax,etc... offset: 108h
    mov bx,etc... offset: 116h
    end Common offset: 124h

    würden nun beideThreads beim Ausführen der Common Funktion der Threads auf 100h springen, nur mit unterschiedlichen zu verarbeitenden variablen. werden die register zwar individuell gefüllt oder wird für jeden Thread die Common Funktion neu erstellt?

    hoffe es ist zu verstehen was ich wissen will!



  • Alle im Scope der Funktion erzeugten Variablen wird für jeden Thread in dessen Stack erzeugt bei Aufruf. Solange in der Funktion auf keine Membervariablen oder ähnliches zugegriffen wird, keine statischen Variablen verwendet werden usw, läuft da nichts schief.

    Zwar hat jeder Thread seinen eigenen Stack, kann aber mit ekligen Tricks auf den Stack des anderen zugreifen (was bei Prozessen nicht so ohne weiteres geht).

    Jede Funktion liegt auch nur einmal vor, wird also nicht extra im Speicher eine Kopie angelegt oder sowas. Das ist aber auch bei mehreren Instanzen einer Klasse nicht der Fall.



  • aja danke für die erklärung


Anmelden zum Antworten