[C con Clase] Problema de uso de CPU
pogui
poguijuaz en gmail.com
Mar Mar 9 16:15:04 CET 2010
Hola lista, tengo el siguiente problema:
Tengo una porción de memoria dinamica (una simple cola) compartida entre
cierta cantidad de threads, unos threads que atienden conecciones tcp/ip
agregan datos a dicha estructura dinamica, y otro thread es el encargado
de sacar datos y procesarlos.
Ahora el problema es el siguiente, el thread encargado de sacar los
datos de la estructura dinamica y procesarlos, dispara mi cpu al %100 ya
que está en un bucle infinito checkeando que si hay datos nuevos a
procesar segun el siguiente codigo:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include "sistemStack.h"
#include "tsmsp.h"
SMSpNodo primero,ultimo; /* el stack de datos a procesar de ambito global*/
pthread_mutex_t outBoxMutex; /*Mutex para proteger dicha memoria dinamica*/
void* outBox(void* connfd) /*Thread encargado de sacar datos y procesarlos*/
{
int done=1;
struct smsData* smsToSend;
printf("Thread del outBox lanzado...\n\n");
while(done) /* el bucle que consume %100 de CPU en cuestión*/
{
pthread_mutex_lock(&outBoxMutex);
smsToSend=smsGet(&primero, &ultimo); /*Tratamos de sacar un dato
de la cola (estructura con datos o un "0" si no hay datos q procesar)*/
pthread_mutex_unlock(&outBoxMutex);
if(smsToSend != 0) /* se encontró algun dato para procesar*/
{
printf("outBox: se detectó mensaje a enviar\n");
sendSMS(smsToSend); /* Procesamos el dato*/
}
}
pthread_exit(NULL);
}
El codigo funciona bien, pero no esta bien que utilice tanto cpu, si
comento el while todo regresa a la normalidad, pero dejo de procesar los
datos.
Hay alguna manera menos perjudicial de hacer esto?
En que me estoy equivocando?
Espero haber explicado bien el problema,
Gracias por su tiempo.
Más información sobre la lista de distribución Cconclase