2016-05-04 2 views
0

das nächste Stück Code -Effizienter Weg für einen Elternteil, die ID seines Kindes nach pthread_create zu erhalten? Betrachten

pthread_t* threads; 

void createWorkers(WorkerType type) 
{ 
    // Create mapper threads and their Container 
    for (int i = 0; i < poolSize; ++i) 
    { 
     // Add new Thread 
     ret = pthread_create(&threads[i], nullptr, function, nullptr); 

     // HERE THE MAIN THREAD PRINTS THE JUST CREATED THREAD ID (*) 
    } 
} 

int main() 
{ 
    createWorkers(); 

    // JOINING THE THREADS 

    return 0; 
} 

Gibt es eine Möglichkeit für die Eltern (der Haupt-Thread) seine Kind-ID zu bekommen? Zum Beispiel direkt nach dem Erstellen eines Kindes in Zeile (*)?

+0

Vermutlich haben Sie die Zuweisung von Speicher für die "Threads" -Array weggelassen, um die Größe des gebuchten Codes zu reduzieren? –

Antwort

1

Wie pro Man-Seite, Thread-ID ist das gleiche wie pthread_t zurückgegeben von pthread_create. So können Sie nur das drucken:

+1

Während dies in der Praxis funktionieren mag, ist 'pthread_t' ein undurchsichtiger Typ, nicht unbedingt arithmetisch, und nicht unbedingt ein' int', selbst wenn es sich um eine arithmetische Operation handelt. – pilcrow

+0

@pilcrow, 'printf' ist nur ein Beispiel. Der Printf-Format-Spezifizierer hat keinen Typ, um 'thread_t' zu drucken, also ist dies das Beste, was ich tun könnte. – SergeyA

+1

Aber ['pthread_t 'könnte eine Struktur sein] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_equal.html#tag_16_426_08), was bedeutet, dass' printf' nicht sinnvoll und portabel verwendet werden kann. – pilcrow

Verwandte Themen