Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - lJvRl

#1
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.
#2
Programación C/C++ / Duda con un ejercicio
20 Abril 2013, 13:13 PM
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;
}
#3
jeje

Pero gracias igualmente porque al principio no sabia ni por donde buscar!!
#4
Si, pero viendo la pagina esta que he puesto parece que sean iguales la primera y la tercera:

Lo que yo he puesto:

1) const A * function();
2) A* const  function();
3) A const * function();

Segun la pagina:

puntero a constante:

tipoX const * puntero ... ;  = 3) 
const tipoX * puntero ... ;  = 2)

puntero constante:

tipoX * const puntero ... ; = 1)

no?
#5
Cita de: amchacon en 18 Abril 2013, 15:42 PM
La primera es una funcion que devuelve un puntero a un objeto constante.

La segunda es una función que devuelve un puntero constante.

La tercera es una variedad sintáctica de la segunda (se te permite poner el * en el tipo o en el const).

Una pregunta:

la tercera es una variedad sintactica de la segunda o de la primera?

Es que he visto esta web: http://www.zator.com/Cpp/E4_2_1e.htm

Y me ha parecido esto.

Gracias!!
#6
que cracks!!!

Muchas gracias a todos!

#7
Alguien sabe cuál es la diferencia entre estas tres funciones?
const A * function();
A* const  function();
A const * function();


Gracias por adelantado!!