Duda con un ejercicio

Iniciado por lJvRl, 20 Abril 2013, 13:13 PM

0 Miembros y 1 Visitante están viendo este tema.

lJvRl

Hola,

tengo que encontrar que es lo que no va bien en este ejercicio pero no hay manera...

Intuyo que es algo de threads pero no domino casi nada el tema...

Si alguien me pudiera echar un cable, almenos para sber por dnd tirar...

Grcias!!!

Os pongo el ejercicio:

¿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;
}

85

2 consejos, el código va dentro de las etiquetas de código c++, se encuentran entre las opciones del armado del post.

segundo, fijate algún foro orientado a Qt
http://www.zonaqt.com/foro
http://qt-project.org/forums
http://www.lawebdelprogramador.com/foros/QT/index1.html
http://foro.elhacker.net/sugerencias_y_dudas_sobre_el_foro/nuevo_subforo_qt-t279707.0.html (XD)

o sino a esperar que alguien te ayude en este foro XD
salu2
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

0xDani

Si coloreas el código, y das algunas indicaciones sobre lo que tienes que hacer en el ejercicio será mucho más probable que alguien te ayude.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

lJvRl

Por lo que he podido deducir es un tema tipico de multithreads llamado Producer-Consumer.

Pero viendo el codigo, no veo que este mal implementado. Sin embargo, el enunciado me pide qeu encuentre que es lo q esta mal.