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

[c] Duvida de memoria partilhada

Discussão em 'Programação' iniciada por theforbidden1, 6 de Junho de 2008. (Respostas: 8; Visualizações: 1293)

  1. theforbidden1

    theforbidden1 Banido

    Ao criar um pedaço de memoria partilahda com a função
    Código:
    shmget(0, sizeof(int* 50), 0666|IPC_CREAT);[code]
    
    o pedaço de memoria vai ficar "zerado" ou com lixo?
     
  2. countzero

    countzero Power Member

     
  3. theforbidden1

    theforbidden1 Banido

    mas o que é que esse shall quer dizer? que eu é que a devo inicializar ou que a rotina já o faz?
     
  4. countzero

    countzero Power Member

    Segundo o IEEE Std 1003.1-2001, o SHALL implica um requisito obrigatório para quem está a implementar o shmget; ou seja, a função deverá retornar a memória inicializada a zero.

    Fiz uns testes rápidos em Linux e posso dizer que a memória vem inicializada a zero, noutros SOs que respeitem o standard o comportamento deverá ser igual :)

    Cumps,
    JP
     
  5. theforbidden1

    theforbidden1 Banido

    Agora tenho outra duvida.

    Se eu criar um semáforo (por exemplo de 1 recurso), e depois cada processo se dedicar a criação de threads, se uma das threads passar pelo semáforo as outras (threads do mesmo processo) também passam por lá (visto serem do mesmo processo) ou ficam á espera que o semáforo fique disponível?
     
  6. countzero

    countzero Power Member

    Assumindo que a sincronização está correctamente implementada, as threads ficam à espera, independentemente de estarem, ou não, dentro do mesmo processo.

    Estou a ver que estás com bastantes dúvidas em relação a IPC, sincronização, threads, etc.

    Recomendo-te vivamente os seguintes livros, são fenomenais e talvez os consigas arranjar online:
    UNIX Network Programming, Volume 2: Interprocess Communications
    Advanced Programming in the UNIX Environment

    Alguns exemplos de código:
    Using semaphores in Pthread programs to protect shared data
    Using semaphores and shared memory

    Espero ter ajudado.

    Cumps,
    JP
     
  7. theforbidden1

    theforbidden1 Banido

    O problema é em na escola ensinarem muito á base do exemplo, e depois os pdf's que eles fazem para os alunos por vezes deixam muito a desejar.
    Como nunca fize-mos nada com processos e threads (os dois ao mesmo tempo) dai as minhas duvidas.

    Depois quando fize-mos exercícios de memoria partilhada havia sempre um programa/processo dominante e ele inicializava a memoria, dai eu não saber o comportamento ;)

    Obrigado por me tirares as duvidas. Para o que eu quero fazer deve chegar :)

    Portanto posso utilizar um semáforo de n recursos para garantir que apenas n threads vão estar afazer determinada tarefa em simultâneo :)
     
  8. theforbidden1

    theforbidden1 Banido

    sabes de alguma maneira de eu saber que uma determinada thread já morreu? com processos podia-se utilizar a combinação wait/exit, para thread ha alguma coisa parecida? de preferência para comunicação com um processo diferente do que a criou.
     
  9. countzero

    countzero Power Member

    Podes utilizar o pthread_join.

    Não tenho conhecimento da existência de uma função que, nativamente, permita a comunicação do estado das threads entre processos diferentes.

    No entanto, podes criar uma thread "supervisora" no processo que mantém a informação, num array por exemplo, de que threads estão em execução e de que threads já terminaram. Assim, através de IPC, podes ter threads em processos separados que perguntam à thread supervisora se uma determinada thread já terminou.

    Cumps,
    JP
     

Partilhar esta Página