| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
manolin66
Registrado: 15 Jun 2009 Mensajes: 2
| Publicado: 15/06/2009 9:38 am | | | Título: Pool de Threads |
| Buenos días! Estoy haciendo un proyecto cliente-servidor que realiza una shell remota en Linux. Uno de los requisitos es realizar un pool de 4 hilos. Esto es, debo atender a 4 clientes (4 hilos) y los demás se quedaran esperando hasta que quede algun hilo libre. Más o menos me defiendo con los hilos pero implementandolos en una aplicación cliente-servidor con sincronización me pierdo un poco. La historia es más o menos así:
El main:
1) En el main creo los 4 hilos y lo hago el accept 2) si todos los hilos están ocupados se bloquea a la espera de uno libre, pero, debo seguir atendiendo las conexiones de otros clientes aunque estos no hagan nada hasta que quede algún hilo libre? 3) Si hay algun hilo libre lo activa, pero, cómo???
Hilos:
1) Permanece bloqueado hasta que llega un cliente 2) se atienden los comandos del cliente hasta que inserta el comando Bye, 3) después del Bye, se queda libre y dispuesto para atender a otro cliente.
No termino de ver clara la implementación, así que si alguien ha hecho algo parecido, o conoce algún ejemplo de un programa parecido en el que pueda fijarme para entenderlo le agradeceria que me echara un cable.
Un saludo |
| | Volver arriba | |  | eagleoneraptor

Registrado: 20 May 2008 Mensajes: 187 Ubicación: Buenos Aires(Argentina)
| Publicado: 22/06/2009 4:39 pm | | | Título: |
| Lo que tenes que tener en cuenta primero es el de aceptar N+1 conexiones, N es la cantidad de conexiones que usaran el shell y el restante lo que tendria que hacer es devolver una notificación de que el servidor esta ocupado y cerrar la conexión inmediatamente.
Los pasos, a groso modo serían así: 1) Aceptar una conexión con socket de escucha. 2) Conexión establecida, buscar si hay un hilo libre (lo puedes verificar usando una variable compartida que indique si el hilo esta corriendo o no, o no se si los hilos que usas proporcionan algun mecanismo), tenes 2 posibilidades:
· Hay un hilo libre, se pasa la conexión como parametro al hilo (o lo que fuera que necesites pasar)
· No hay un hilo libre, se devuelve la notificación (en el mismo hilo, no en otro) de "Servidor lleno" y se cierra la conexión. 3) Aceptar nueva conexión.
Con este mecanismo siempre tendras una conexión libre para la notificación de servidor agotado.
En el hilo, cuando recibas 'bye' deberas indicar de alguna forma al programa principal que ese hilo esta libre y cerrar la conexión.
Es lo que a mi se me ocurre, prueba si te va bien. Un Saludo! _________________ "Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |