[C con Clase] VIDA O MUERTE

Raul Chakraborty chakras_ve en hotmail.com
Sab Feb 17 20:34:10 CET 2007


No soy un experto en este tipo de programación, pero la he hecho en windows y con otros kernels tambien. A ver veamos tu codigo:
> LPVOID Workerthread //hilo> {> clientesactivos++; //incremento la variable dentro del hilo.> .> .> .> funcionprincipal();> .> .> .> clientesactivos--; //la decremento cuando la funcionprincipal > acaba,es decir ,cuando l //el cliente se > desconecta> return 0;> }> > main> {> .> .> .> clientesactivos = 0;> while(clientesactivos <= 4)> { .> .> .> accept(socket........); //acepto la coenxion de un cliente> .> .> .> CreateThread(....,..,..,WorkerThread,..) //Entro en el hilo
Aca podria seguir este hilo corriendo (main), y dejar el último hilo en espera. El createthread solo crea el hilo, mas no significa que comienza a correr inmediatamente.
> while(clienteactivos >=4)> {sleep(10000);}
Aca deja de correr main, pero no significa que el ultimo hilo que creaste va a correr, podria correr el cliente 1, por decir un ejemplo. Claro, estas esperando un tiempo de 10 segundos pero no es garantia de que se ejecute el ultimo hilo que creaste (claro, segun yo lo veo es altamente improbable, pero podria suceder, tampoco se que otras cosas estan corriendo) fijate que aun no has incrementado el contador, y si volviece a correr main, (supongo que tiene alta prioridad y no un round robin) podria correr otro hilo aceptando a otro usuario. Si, tienes razon, es poco probable, pero no imposible. A lo mejor si incrementases el numero de clientes antes de crear el nuevo hilo o crear la zona critica se solucionaria el problema, a lo mejor no. A mi no me parece que creando una zona critica solucionarias mucho, ya que igual tendrias que aumentar el numero de clientes en main, y no en el hilo ya que sucederia lo mismo.
 
Ahora el hilo del ultimo cliente pidio correr antes que main, por lo tanto, si main tiene la misma prioridad, este no deberia correr antes que el ultimo hilo que creaste(sin garantia que eso signifique que se aumenta el contador o no... ya que se corren muchas cosas fuera de las cosas que uno programa.), y eso podria ser tu punto a defender, espero haberte podido ayudar algo, suerte y espero que no te suspendan! 
> }> > }> > Este codigo pertenece a un servidor. y permito la entrada a 5 clientes como > maximo.necesito tener constancia de cuantos clientes hay conectados con la > variable global cilentesactivos.El sexto cliente no debe conectarse y si se > descoencta alguno de los 5, debe poderse admitir a otro cliente> El tema es que permito la entrada a funcionprincipal() a clientes que he > permitido el acceso al hilo. Clientesactivos es un variable que se incremeta > y decrementa dentro del hilo, y conozco su valor en "tiempo real" en el > main. Si tengo 5 clientes conectados, el main queda en el bucle que ejecuta > la funcion sleep, y sale de el cuando es inferior a 4(cuando se desconecta > algun cliente). Mi profesor no entiende bien el codigo. Dice q tenia q haber > introducido esaa variable en una seccion critica por que su valor se ve > afectado entre hilos, pero yo creo q no importa eso. me quiere catear por > esa pijada a pesar de que funciona bien, y encima no creo q este en lo > cierto. No creo q exista alguna situacion q se me puedan conectar mas o > menos clientes, que opinais?steven?> > _________________________________________________________________> Horóscopo, tarot, numerología... Escucha lo que te dicen los astros. > http://astrocentro.msn.es/> > > _______________________________________________> 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
_________________________________________________________________
Consigue el nuevo Windows Live Messenger
http://get.live.com/messenger/overview
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070217/792a1869/attachment.html>


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