Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda sobre un programa

Estas en el tema de Duda sobre un programa en el foro de C/C++ en Foros del Web. Hola, me han pasado este ejercicio para la uní y por mas que me lo mire no consigo sacar la respuesta... A ver si alguien ...
  #1 (permalink)  
Antiguo 18/04/2013, 09:10
lJvRl
Invitado
 
Mensajes: n/a
Puntos:
Duda sobre un programa

Hola,

me han pasado este ejercicio para la uní y por mas que me lo mire no consigo sacar la respuesta... A ver si alguien puede ayudarme..

gracias por adelantado!!


¿Que falla en este código? ¿Y por qué?
#include <QtCore>

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

const int DataSize = 100000;
const int BufferSize = 8192;
char buffer[BufferSize];

QWaitCondition bufferNotEmpty;
QWaitCondition bufferNotFull;
QMutex mutex;
int numUsedBytes = 0;

class Producer : public QThread
{
public:
void run();
};

void Producer::run()
{
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

for (int i = 0; i < DataSize; ++i) {
mutex.lock();
if (numUsedBytes == BufferSize)
bufferNotFull.wait(&mutex);
mutex.unlock();

buffer[i % BufferSize] = "ACGT"[(int)qrand() % 4];

++numUsedBytes;
bufferNotEmpty.wakeAll();
}
}

class Consumer : public QThread
{
public:
void run();
};

void Consumer::run()
{
for (int i = 0; i < DataSize; ++i) {
mutex.lock();
if (numUsedBytes == 0)
bufferNotEmpty.wait(&mutex);
mutex.unlock();

fprintf(stderr, "%c", buffer[i % BufferSize]);

--numUsedBytes;
bufferNotFull.wakeAll();
}
fprintf(stderr, "\n");
}

int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Producer producer;
Consumer consumer;
producer.start();
consumer.start();
producer.wait();
consumer.wait();
return 0;
}
  #2 (permalink)  
Antiguo 18/04/2013, 16:35
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Duda sobre un programa

Y que error te tira? Es al compilar o en tiempo de ejecución?
  #3 (permalink)  
Antiguo 20/04/2013, 05:12
lJvRl
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre un programa

Es un ejercicio teorico que nos han mandado.

Hemos de encontrar que esta mal..

Intuyo que es algo en la sincronizacion de los threads pero no domino casi nada el tema y no se bien bine que pasa...
  #4 (permalink)  
Antiguo 20/04/2013, 07:33
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Duda sobre un programa

Pero vamos a ver, intenta compilarlo y mira a ver que te marca xD
  #5 (permalink)  
Antiguo 20/04/2013, 07:36
lJvRl
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre un programa

me peta la libreria qCore y no hay manera de instalarla....
  #6 (permalink)  
Antiguo 20/04/2013, 16:41
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Duda sobre un programa

Cita:
Iniciado por lJvRl Ver Mensaje
me peta la libreria qCore y no hay manera de instalarla....
Instalate VirtualBox y montate una máquina virtual con linux.

Compila allí.
  #7 (permalink)  
Antiguo 20/04/2013, 18:07
lJvRl
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre un programa

Ya lo he podido compilar.

Compila sin problemas y la salida es la siguiente:

GTACGTCACATGCCTTCTCTACCCCCTCAGTTCTCCGCCGGTCATAGTTG CATGGCACGCTCACCTCAGTCCTACTTTTG
AGTTGCTATTCCGAAGCTAGGACTGAGTCATGACACACCTGTGGATCATA GGCCGCAGATACA
...
(muchas mas lineas).

Realmente no se que hace mal este programa...
  #8 (permalink)  
Antiguo 20/04/2013, 18:08
lJvRl
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre un programa

(mensaje repetido)
  #9 (permalink)  
Antiguo 20/04/2013, 19:28
lJvRl
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre un programa

Por lo que he podido leer es un problema tipico de multithreads (producer-consumer).

Pero viendo el ejercicio veo que todo esta bien no?

Etiquetas: int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:11.