Jump to content
Fórum Script Brasil
  • 0

Problemas com mutex


rafaelarbl
 Share

Question

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

  • 0
2 horas atrás, rafaelarbl disse:

 

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.

 

Pode ser aí o problema. :)

Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...