1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

threads

Discussão em 'Programação' iniciada por Linux, 30 de Agosto de 2006. (Respostas: 5; Visualizações: 620)

  1. 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 [​IMG].


    É 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?
     
  2. inginheiiro

    inginheiiro Power Member

    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
     
  3. Hipnoted

    Hipnoted Power Member

    Também poder criar processos com a finção fork() e saber o seu PID através da função getpid().
     
  4. 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........... :(
     
  5. inginheiiro

    inginheiiro Power Member

    tens que ser mais especifico.
    1.linguagem
    2.sistema operativo
    3.coloca aqui o que queres fazer concretamente.

    /ing
     
  6. 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 ;)
     

Partilhar esta Página