Usted ha tropezado con los bordes de una gran guerra religiosa, que gira en torno a la cuestión
programas basados en eventos deben ser escritos usando múltiples hilos o el uso de un solo bucle evento?
El campo de hilos cree que las entidades individuales, como "jugadores", se programan con más facilidad cuando se escribe como hilos reales, posiblemente explcitly renunciar al procesador cuando ya no se necesitan. La información sobre el estado del jugador se puede almacenar en variables locales e incluso en el contador del programa. Pero con los hilos puede que tenga que preocuparse por la atomicidad, el punto muerto y otras alegrías de la programación concurrente.
El campo impulsado por eventos cree que es mucho más simple obtener una aplicación completa cuando todas las entidades son capaces de responder a cada evento, y esa entidad obtiene el control total del procesador por el tiempo que necesita para procesar el evento (que mejor debe ser finito, y por lo general es mejor que sea corto). No hay preocupaciones sobre concurrencia porque cada controlador de eventos se ejecuta atómicamente, pero hay un costo de programación: cuando el controlador de eventos finaliza, todos sus procedimientos finalizan, por lo que la información sobre su estado debe almacenarse en los campos de un objeto asignado en el montón.
La historia de los hilos tiende a brillar cuando una entidad tiene un flujo de control complejo o quiere usar mucha abstracción — ambos son difíciles de codificar sin hilos. La historia de los eventos tiende a brillar cuando los manejadores son bastante simples — es genial tener todos los manejadores ejecutándose atómicamente sin tener que preocuparse por ello, y simplifica la comunicación entre las entidades.
Antes de continuar con su tarea, averigüe a qué grupo religioso pertenece su instructor.
Como ha preguntado acerca de los hilos, recomiendo encarecidamente las bibliotecas de hilos y canales en Dave Hanson's C Interfaces and Implementations. El software es libre, y el libro vale la pena comprar — que incluye muchos otros módulos que serán muy útiles para cualquiera que escriba las tareas en C.
debo trabajar cada jugador como un 'tenedor' y las roscas el tenedor, o simplemente crear algunos hilos para el jugador y asociarlos de alguna manera?
A menos que le han pedido a utilizar fork
, yo evitaría que — los mecanismos de comunicación entre procesos Unix no son tan agradable de usar. Si puede obtener la biblioteca de Hanson, yo diría crear un hilo por jugador y hacer que los jugadores se comuniquen entre sí (y con el servidor del juego, que también debería ser un hilo) utilizando los canales de Hanson.
Supongo que su tarea es que use un hilo por jugador. Si es así, debe dejar eso en claro en su pregunta. Además, ¿cada jugador es una persona y el hilo de su interfaz para el juego, o es el hilo del jugador? Además, ¿en qué plataforma tienes que ejecutar esto? Supongo que algunos * nix. – nategoose
@nateg, ya que no requiere código, la plataforma es casi irrelevante. –
@Henk: ¿Windows tiene un tenedor()? Creo que la plataforma es relevante en ese nivel de abstracción. – Duncan