depende del kernel la cantidad maxima, por defecto si no me equivoco es de 16MB.<br>igual cuando tratas de poner algo y no entra te avisa, con lo cual no perdes los datos.<br>tambien podes usar semaforos y memoria compartida...<br>
hay que analizar el problema.<br>David<br><br><br><div class="gmail_quote">El 9 de marzo de 2010 21:24, 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;">
Muy buena información! gracias.<br>
Solo me queda una duda, este tipo de colas tiene algun limite, es decir, puedo incluir ilimitada cantidad de elementos como lo es en una estructura dinamica?<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">
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" target="_blank">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>
El 9 de marzo de 2010 18:26, 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 class="im">
<br>
<br>
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<br>
si incluyo por ejemplo un retraso con un sleep que no consume<br>
instrucciones del procesador, el consumo baja considerablemente.<br>
<br>
gracias por tu tiempo.<br>
<br>
David Fire escribió:<br>
<br>
hola<br>
en vez de utilizar una lista utiliza una cola del sistema<br>
operativo, la llamda es bloqueante, osea en vez de estar<br>
perdiendo tiempo y consumiendo cpu mirando si hay datos, se va<br>
a quedar durmiendo esperando los datos.<br>
<br>
<br>
<br>
El 9 de marzo de 2010 12:15, pogui <<a href="mailto:poguijuaz@gmail.com" target="_blank">poguijuaz@gmail.com</a><br></div>
<mailto:<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><div><div></div><div class="h5"><br>
<mailto:<a href="mailto:poguijuaz@gmail.com" target="_blank">poguijuaz@gmail.com</a>>>> escribió:<br>
<br>
<br>
Hola lista, tengo el siguiente problema:<br>
Tengo una porción de memoria dinamica (una simple cola)<br>
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<br>
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<br>
ambito<br>
global*/<br>
pthread_mutex_t outBoxMutex; /*Mutex para proteger dicha<br>
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<br>
cuestión*/<br>
{<br>
pthread_mutex_lock(&outBoxMutex);<br>
smsToSend=smsGet(&primero, &ultimo); /*Tratamos de<br>
sacar un<br>
dato de la cola (estructura con datos o un "0" si no hay<br>
datos q<br>
procesar)*/<br>
pthread_mutex_unlock(&outBoxMutex);<br>
if(smsToSend != 0) /* se encontró algun dato para<br>
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<br>
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>
<mailto:<a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a>><br>
<mailto:<a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<mailto:<a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a>>><br>
<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>
<<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>
(='.'=)This is Bunny. Copy and paste bunny into your<br>
(")_(")signature to help him gain world domination.<br>
<br>
------------------------------------------------------------------------<br>
<br>
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<mailto:<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>
<<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>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<mailto:<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>
<<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>
------------------------------------------------------------------------<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><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>