[c] Duvida de memoria partilhada

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?
 
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?[/quote]

Da "man page" do shmget(3p):

[I](...)
When the shared memory segment is created, it shall be initialized with
       all zero values.
(...)

[/I]Cumps,
JP
 
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
 
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?
 
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
 
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 :)
 
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.
 
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
 
Back
Topo