Пример #1
0
int main()
{
	int numeroProcessosFilhos;
	Ponte *ponte_shared;
	int segment_id;
	pid_t child_pid;
	int indice;
	int child_status;
	
	printf("\n Digite o Numero de Criancas para atravessar a Ponte: ");
	scanf("%d", &numeroProcessosFilhos);
	
	if(numeroProcessosFilhos <= 0)
	{
		printf("\nO numero de criancas deve ser maior que zero\n\n");
		return -1;
	}
	
	printf("\nCrianca \t Lado \t\t Estado \t NumTravessias \t tempoDecisao\n\n");
	
	ponte_shared = ponte_create();
	child_pid = gerarProcessosFilhos(numeroProcessosFilhos, ponte_shared, segment_id);	
	
	if(!processoEhFilho(child_pid))
	{
		esperarProcessosFilhosTerminarem(numeroProcessosFilhos);
		ponte_delete(ponte_shared);
	}
	
	
	return 0;
}
Пример #2
0
Ponte * criarPonteComMemoriaCompartilhada(Ponte *ponte_shared_memory, int *segment_id)
{
	struct shmid_ds shmbuffer;
	int segment_size;
	const int shared_segment_size = 0x6400;
	
	(*segment_id) = shmget ( IPC_PRIVATE, shared_segment_size, IPC_CREAT |IPC_EXCL |
	S_IRUSR |S_IWUSR );
	//printf("segment_id: %d\n", (*segment_id));
	
	ponte_shared_memory = shmat ( (*segment_id), 0, 0 );
	//printf ( "Memoria compartilhada conectada no endereco: %p\n", ponte_shared_memory );
	
	shmctl ( (*segment_id), IPC_STAT, &shmbuffer );
	segment_size = shmbuffer.shm_segsz;
	//printf ( "Tamanho do segmento: %d bytes\n", segment_size );
	
	ponte_shared_memory = ponte_create();
	
	return ponte_shared_memory;
}