Ik stuit op een probleem bij het gebruik van threads in het programma dat ik aan't schrijven ben.
Ik start in main een functie genaamd create_a() (functie namen vereenvoudigd ter duidelijkheid) en die maakt een thread die de functie a_main uitvoert mbv de functie pthread_create( id, NULL, a_main, NULL) en returned dan.
Deze a_main wacht totdat er een telnet verbinding binnenkomt en als dat gebeurt dan start deze a_main de functie create_a() weer op (zodat er weer een a_main uitgevoerd wordt die op een telnet verbinding wacht) en dan handelt hij de telnet verbinding af.
Alle id's die pthread_create teruggeeft worden opgeslagen in een linked list.
Om de positie in de linked list te vinden moet de waarde van pthread_self() vergeleken worden met de opgeslagen id waarde. Hier komt het probleem. De waarde die pthread_create teruggeeft is steeds gelijk aan die waarde die de eerste keer teruggegeven wordt. M.a.w. de 2e en volgende keren dat create_a een thread maakt voor de functie a_main krijgen steeds dezelfde id. Op deze manier werkt het zoeken in de linked list natuurlijk niet, omdat ik steeds bij de 1e thread uitkom.
Ik zou graag willen weten of dit gedrag van pthread_create zo hoort
In mijn geval is het namelijk niet gewenst dat als een functie meerdere malen in een thread uitgevoerd wordt, die thread dan dezelfde id krijgt. Is dit te verhelpen?
Het herschrijven van mijn programma zodat hij hier geen problemen meer mee heeft is altijd een optie, maar die wil ik nu nog niet gaan toepassen. Ik wil eerst kijken of mensen hier misschien ervaring mee hebben opgedaan en die ervaring willen delen
Ik heb (natuurlijk!) de man pages van pthread_create en andere pthread_ functies doorgelezen, maar daar wordt niet ingegaan op de id. Google levert meerdere functiebeschrijvingen op, maar deze zijn allen bijna gelijk aan die van de man pages.
Ik start in main een functie genaamd create_a() (functie namen vereenvoudigd ter duidelijkheid) en die maakt een thread die de functie a_main uitvoert mbv de functie pthread_create( id, NULL, a_main, NULL) en returned dan.
Deze a_main wacht totdat er een telnet verbinding binnenkomt en als dat gebeurt dan start deze a_main de functie create_a() weer op (zodat er weer een a_main uitgevoerd wordt die op een telnet verbinding wacht) en dan handelt hij de telnet verbinding af.
Alle id's die pthread_create teruggeeft worden opgeslagen in een linked list.
Om de positie in de linked list te vinden moet de waarde van pthread_self() vergeleken worden met de opgeslagen id waarde. Hier komt het probleem. De waarde die pthread_create teruggeeft is steeds gelijk aan die waarde die de eerste keer teruggegeven wordt. M.a.w. de 2e en volgende keren dat create_a een thread maakt voor de functie a_main krijgen steeds dezelfde id. Op deze manier werkt het zoeken in de linked list natuurlijk niet, omdat ik steeds bij de 1e thread uitkom.
Ik zou graag willen weten of dit gedrag van pthread_create zo hoort
Het herschrijven van mijn programma zodat hij hier geen problemen meer mee heeft is altijd een optie, maar die wil ik nu nog niet gaan toepassen. Ik wil eerst kijken of mensen hier misschien ervaring mee hebben opgedaan en die ervaring willen delen
Ik heb (natuurlijk!) de man pages van pthread_create en andere pthread_ functies doorgelezen, maar daar wordt niet ingegaan op de id. Google levert meerdere functiebeschrijvingen op, maar deze zijn allen bijna gelijk aan die van de man pages.