threads

Linux

Membro
Olá a todos,

Será que alguém me sabe dizer, de que forma é que posso tornar um id de cada thread (criadas por um processo) visível a um outro processo?

Para obter o id da thread, é fácil é só utilizar p thread_self(), mas este numero não é considerado um processo pelo sistema......ou melhor o sistema não o tem guardado em nenhum lado...pelo menos que eu saiba
wink.gif
.


É que eu precisso de "aceder" a uma thread em especifico e não ao processo que a criou....não sei se me estou a fazer entender?!?!

Alguém tem alguma ideia?
 
1. consegues sempre obter todos os ID's de todas as threads criadas. (depende do sistema que estejas a usar). o SO disponibiliza sempre uma API para isso.

2.No teu caso não é necessário. A solução passa por usares uma variavel shared (partilhada). Tens que ter cuidado apenas com as leituras/escritas. Podes usar semaforos para isso.

/ing
 
Pois......

Mas o problema persiste!

A questão é, se o sistema guarda o id da thread em algum sitio, então, onde?
É porque a unica forma que eu tenho de ver se a thread ainda está viva é indo ao sistema ver se o id dela ainda está (neste caso como não sei onde o sistema o guarda ou se o guarda não posso fazer isto), a directoria /usr/proc/bin estão lá os pid's de todos os procesos a correrem no sistema, no entanto não me posso guiar só pelo id do processo, pq :

imaginemos........
1. processo A -> pid = 8752
2. o processo A cria 2 threads
3. thenho um array de semaforos partilhado...então

[0]=8752
[1]=
[2]=8752
...
[19]=

4. tenho um novo processo que precisa de ver quais são as thread que ainda estão vivas
4.a. Está mal pq aparece lá 2 valores iguais e não é isso que quero
4.b. a thread correspondente a [0]=8752 morre
4.c. quando o processo B for validar, vai percorrer o array e verificar (primeira posição) se o pid 8752 ainda está na tal directoria ...e encontra mas na verdade o que ele encontraé i pid correspondente á thread [2]..........
4.d. isto trás tb o prob de as posição [0] e [2] só serem limpas quando a ultima thread do processo morrer...


não sei se me consegui explicar........... :(
 
Encontrei a solução

Linguagem: C++
SO: Linux

Já descobri a solução.
Eu precisava de arranjar uma forma de obter o id de cada thread,
posso fazer isso com a seguinte chamada ao sistema -> syscall(SYS_gettid)
e precisava de saber se o sistema guarda este valor nalgum lado
guarda no directorio -> /proc/"pid"/task/

Esta directoria tem tododas a thread do processo "pid"

Obrigado na mesma por me terem tentado ajudar.

ps: já agora.....sou uma rapariga ;)
 
Back
Topo