コード例 #1
0
ファイル: main.c プロジェクト: LucianoPC/Projeto_01_FSO
Crianca * criarCrianca(int numeroCrianca)
{
	int lado = rand() % NUMERO_LADOS_NA_PONTE;
	int numeroTravessias = 1 + rand() % LIMITE_DO_NUMERO_TRAVESSIAS;
		
	Crianca *crianca = crianca_create(numeroCrianca, lado, numeroTravessias);
	
	return crianca;
}
コード例 #2
0
ファイル: main.c プロジェクト: ViniciusRangel/Projeto_01_FSO
void entrarNaPonte(Ponte *ponte_shared_memory, int segment_id)
{
	//printf ( "\nSegment_ID da Ponte: %d\n", segment_id );
	//printf("\n *****Endereco da Ponte: %p\n", ponte_shared_memory );
	//printf(" *****Valor semaforoEsquerda: %d\n", semaforoBidimensional_semaforoEsquerda_getValue(ponte_shared_memory->semaforo));
	//printf(" *****Valor semaforoDireita: %d\n", semaforoBidimensional_semaforoDireita_getValue(ponte_shared_memory->semaforo));
	//printf(" *****Valor semaforoMediador: %d\n", semaforoBidimensional_semaforoMediador_getValue(ponte_shared_memory->semaforo));
	
	//srand(time(NULL));
	int lado = rand() % 2;
	//srand(time(NULL));
	int numeroTravessias = 1 + rand() % 4;
	
	int tempoDecisao = 0;
	
	Crianca *crianca = crianca_create(getpid(), tempoDecisao, lado, numeroTravessias);
	
	printf("\nCrianca: %d; Lado: %d; Numero de Travessias = %d\n", getpid(), lado, numeroTravessias);
	
	while(crianca->numeroTravessias > 0)
	{
		crianca->tempoDecisao = rand() % 1000;
		
		printf("\nCrianca: %d; Tempo de Decisao: %d\n", getpid(), crianca->tempoDecisao);
		
		usleep(crianca->tempoDecisao);
	
		if(crianca->lado == ESQUERDA)
		{
			//printf("\nCrianca: %d TENTANDO ATRAVESSAR a ponte da Esquerda para Direita\n", getpid());
			ponte_atravessar_esquerdaParaDireita(ponte_shared_memory, crianca, 70);
			crianca->lado = DIREITA;
		}else{
			//printf("\nCrianca: %d TENTANDO ATRAVESSAR a ponte da Direita para Esquerda\n", getpid());
			ponte_atravessar_direitaParaEsquerda(ponte_shared_memory, crianca, 70);
			crianca->lado = ESQUERDA;
		}
		crianca->numeroTravessias--;
	}
	
}