la llamada SI tiene que ser bloqueante<br>busca "IPC" inter process comunication.<br>la idea es que un thread le manda al otro la info por medio de una cola "queue" del sistema operativo.<br>el que recibe la informacion esta dormido hasta que esta llega tonces no consume CPU.<br>

busca IPC queue<br><a href="http://www.cs.cf.ac.uk/Dave/C/node25.html">http://www.cs.cf.ac.uk/Dave/C/node25.html</a><br>mandame un mail manana y te  paso unas clases que hice para la facu que manejan todo y es transparente para vos (o casi...)<br>

David<br><br><div class="gmail_quote">El 9 de marzo de 2010 18:26, pogui <span dir="ltr"><<a href="mailto:poguijuaz@gmail.com">poguijuaz@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

Hola David, gracias por responder,<br>
Desconosco a lo que te referís. Me das alguna pista?<br>
Estoy bajo gnu/linux.<br>
Al parecer que la llamada no sea bloqueante es la solución ya que si incluyo por ejemplo un retraso con un sleep que no consume instrucciones del procesador, el consumo baja considerablemente.<br>
<br>
gracias por tu tiempo.<br>
<br>
David Fire escribió:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
hola<br>
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.<br>


<br>
<br>
<br></div>
El 9 de marzo de 2010 12:15, pogui <<a href="mailto:poguijuaz@gmail.com" target="_blank">poguijuaz@gmail.com</a> <mailto:<a href="mailto:poguijuaz@gmail.com" target="_blank">poguijuaz@gmail.com</a>>> escribió:<div>

<div></div><div class="h5"><br>
<br>
    Hola lista, tengo el siguiente problema:<br>
    Tengo una porción de memoria dinamica (una simple cola) compartida<br>
    entre cierta cantidad de threads, unos threads que atienden<br>
    conecciones tcp/ip agregan datos a dicha estructura dinamica, y<br>
    otro thread es el encargado de sacar datos y procesarlos.<br>
    Ahora el problema es el siguiente, el thread encargado de sacar<br>
    los datos de la estructura dinamica y procesarlos, dispara mi cpu<br>
    al %100 ya que está en un bucle infinito checkeando que si hay<br>
    datos nuevos a procesar segun el siguiente codigo:<br>
<br>
    #include <stdio.h><br>
    #include <stdlib.h><br>
    #include <pthread.h><br>
<br>
    #include "sistemStack.h"<br>
    #include "tsmsp.h"<br>
<br>
    SMSpNodo primero,ultimo; /* el stack de datos a procesar de ambito<br>
    global*/<br>
    pthread_mutex_t outBoxMutex; /*Mutex para proteger dicha memoria<br>
    dinamica*/<br>
<br>
    void* outBox(void* connfd) /*Thread encargado de sacar datos y<br>
    procesarlos*/<br>
    {<br>
      int done=1;<br>
      struct smsData* smsToSend;<br>
      printf("Thread del outBox lanzado...\n\n");<br>
        while(done)  /* el bucle que consume %100 de CPU en cuestión*/<br>
      {<br>
          pthread_mutex_lock(&outBoxMutex);<br>
          smsToSend=smsGet(&primero, &ultimo); /*Tratamos de sacar un<br>
    dato de la cola  (estructura con datos  o un "0" si no hay datos q<br>
    procesar)*/<br>
          pthread_mutex_unlock(&outBoxMutex);<br>
          if(smsToSend != 0) /* se encontró algun dato para procesar*/<br>
          {<br>
              printf("outBox: se detectó mensaje a enviar\n");<br>
              sendSMS(smsToSend);   /* Procesamos el dato*/<br>
          }<br>
      }<br>
<br>
      pthread_exit(NULL);<br>
    }<br>
<br>
<br>
    El codigo funciona bien, pero no esta bien que utilice tanto cpu,<br>
    si comento el while todo regresa a la normalidad, pero dejo de<br>
    procesar los datos.<br>
    Hay alguna manera menos perjudicial de hacer esto?<br>
    En que me estoy equivocando?<br>
<br>
    Espero haber explicado bien el problema,<br>
    Gracias por su tiempo.<br>
<br>
    _______________________________________________<br>
    Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br></div></div>
    <mailto:<a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a>><div class="im"><br>
    <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
    Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
    <<a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a>><br>
<br>
<br>
<br>
<br>
-- <br>
(\__/)<br>
(='.'=)This is Bunny. Copy and paste bunny into your<br>
(")_(")signature to help him gain world domination.<br>
<br></div>
------------------------------------------------------------------------<div class="im"><br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></blockquote><div><div></div><div class="h5">
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br> (\__/) <br>(='.'=)This is Bunny. Copy and paste bunny into your <br>(")_(")signature to help him gain world domination. <br><br>