Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com mutex


rafaelarbl

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0
9 horas atrás, rafaelarbl disse:

Problemas deste código:
Primeiro. Ele gera um primeiro número randômico e nunca mais. Eu queria um número randômico para cada execução. :

 

Para isso, inclua a biblioteca time.h, e coloque srand (time(NULL)), de preferência logo no inicio da função main.

Exemplo:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
  
int main ()
  
{
  
srand (time(NULL));
  
int a;
  
a = 1 + rand () % 100;
  
printf ("\n%d\n", a);

return 0;
  
}

 

9 horas atrás, rafaelarbl disse:

Segundo. Ele atribui valores de temperatura na coluna dos valores de saturação de oxigênio, e valores de saturação de oxigênio na coluna da temperatura. Sendo que eu nunca disse para ele fazer isso no código! Eu não sei por que ele faz isso! (...)

Repare no tamanho que você define sua matriz: 

int matriz[100][2];

Lembre-se, vetores iniciam no zero e vão até o tamanho -1. Nesse caso, de 0 a 99 linhas, e 0 a 1 colunas.

O provável erro está nessa parte:

int a = ;
	for (a = ; a<101; a++) {
		matriz[a][] = 10;
		matriz[a][1] = 100;
		matriz[a][2] = 100;
	}

Você está usando a sua matriz como se fosse de 0 a 100 linhas e não 0 a 99, pois <<a>> é incrementado de 0 até 100 e está usando 0 a 2 colunas.

Para resolver isso é simples. Se você quiser uma matriz que vai de 0 a 100 linhas, e 0 a 2 colunas:

int matriz [101][3].

se quer de 0 a 99 linhas e 0 a 2 colunas:

int matriz [100][3].

Feita essa correção, ajuste esse for e o seu programa estará redondinho.

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, Aristóteles disse:

Para isso, inclua a biblioteca time.h, e coloque srand (time(NULL)), de preferência logo no inicio da função main.

incluí a biblioteca time e coloquei o srand (time(NULL)) no início da função main. Não arrumou os aleatórios.

Troquei o srand (time(NULL)) de lugar, e coloquei dentro das threads, dentro do while(1), antes da seção crítica. Não arrumou, também.

Por último: tentei colocar o srand (time(NULL)) dentro da seção crítica. Também não arrumou.

Em qualquer alteração que eu fizesse era como se eu não fizesse alteração nenhuma... É como se a função não interferisse com o aleatório.

2 horas atrás, Aristóteles disse:

Você está usando a sua matriz como se fosse de 0 a 100 linhas e não 0 a 99, pois <<a>> é incrementado de 0 até 100 e está usando 0 a 2 colunas.

Para resolver isso é simples. Se você quiser uma matriz que vai de 0 a 100 linhas, e 0 a 2 colunas:

int matriz [100][3].

Noooooossa.... Eu sou uma anta! Hahahaha ^^'

Ok, arrumei, ficou certinho. Não deu mais o segundo problema.

Obrigada, tu é um gênio !

 

Agora só falta arrumar o primeiro problema, vou dar uma pesquisada nas funções que tu citou para ver se eu encontro alguma coisa.

Se puder ajudar: ele só começou a dar esse problema dos números randômicos quando eu usei mutex para proteger a seção crítica.

A partir daí ele não varia mais os randômicos. Antes variava normalmente.

Link para o comentário
Compartilhar em outros sites

  • 0

Só que não é. Estou fazendo uns testes olha, nem isso funciona:

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main() {
    int a = 0;
    srand (time(NULL));
    while(1) {
    	while (a<20) {
    		a = rand() % 100;
    	}
    	printf("%d\n",a);
    }
}

 

Não sei nem mais por que nem como funcionou antes...

P.S. ( se colocar o srand (time(NULL)) dentro do while(1) não funciona igual...

Ok entendi. 

A declaração da variável precisa estar dentro do while (1)

era só isso. agora está tudo funcionando.

(sei lá porque a declaração tem que estar dentro mas enfim)

É verdade entendi. 

É que se eu não zerar ela entre uma execução e a outra então ela já vai estar "boa":

não vai nem precisar entrar no "while (temp< 30)" (por exemplo).

 

E daí ela nunca vai variar mesmo.

Entendi tudo.

Obrigada.

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...