[C con Clase] Problema de uso de CPU

David Fire ddfire en gmail.com
Mar Mar 9 17:59:57 CET 2010


hola
en vez de utilizar una lista utiliza una cola del sistema operativo, la
llamda es bloqueante, osea en vez de estar perdiendo tiempo y consumiendo
cpu mirando si hay datos, se va a quedar durmiendo esperando los datos.



El 9 de marzo de 2010 12:15, pogui <poguijuaz en gmail.com> escribió:

> 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.
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100309/d64cd9d0/attachment.html>


Más información sobre la lista de distribución Cconclase