Tengo un programa que crea hilos cada X tiempo (hasta un máximo dado) los cuales recorren posiciones de una "cuadrícula" de forma más o menos aleatoria (representada en forma de una struct con x e y). Mi objetivo es sincronizar los hilos para que no puedan ocupar la misma posición de dicha cuadrícula.
Mi primera idea fue utilizar el paso de mensajes (con recepción bloqueante) con razón del mensaje un entero único para cada casilla. De esta forma, previamente mandamos todos los mensajes para cada casilla y, en el momento de que un hilo avance esa casilla recoge el mensaje y no lo vuelve a enviar hasta que no abandone esa casilla.
(Si un hilo quiere ocupar una casilla que está ocupada tendría que recoger el mensaje y no podría.)
Esto mismo ya lo hice en UNIX (con procesos en vez de hilos) sin problemas.
Sin embargo parece que en Windows sólo se pueden recibir mensajes del mismo hilo (aunque se pueden enviar a cualquier hilo utilizando la ID correspondiente en PostThreadMessage)... Por lo tanto toda la idea anterior al traste.
Al grano:
- ¿Se pueden recibir mensajes con PeekMessage/GetMessage (u otra) que estén en el "buzón" de otro hilo?
Otra idea que se me ha ocurrido es usar objetos de tipo CRITICAL_SECTION pero claro, necesitaría un objeto por cada "casilla";
- ¿Es posible crear matrices de objetos CRITICAL_SECTION? ¿Existe algún tipo de inconveniente?
(Aparte de conseguir pasárselo correctamente a la función del hilo)