Cómo sincronizar un proceso con número aleatorio de hilos activos?

votos
0

Tengo el siguiente problema. Mi proceso genera 4 hilos, que realizan la misma tarea de forma independiente y tienen que esperar a que todos ellos para terminar el procesamiento antes de ir a la siguiente iteración de procesamiento. Sin embargo, el número de hilos activos, es decir, el número de hilos de procesamiento de datos y que tiene que esperar a que los otros acabado es variable de 1 a 4. Por ejemplo, algunas veces 2 hilos procesarán los datos y que necesitan para esperar el uno al otro Antes de continuar.

He leído que las barreras podrían hacer eso por mí, sin embargo, cuando se crean Tengo que especificar el número de hilos que esperar, que no es el caso con mi solicitud. Además, debido a la forma en que se implementa la aplicación, sería difícil y complejo para mantener la creación / destrucción de las barreras cada vez.

Me preguntaba si hay otra manera de resolver este problema.

¡Gracias!

Publicado el 18/12/2018 a las 11:02
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Así es como se puede lograr usando semáforo.

// Global Sempahore initialized to zero.
Sempahore global_sempahore(0)

// Your main thread which spawns your 'n' worker thraeds.
// After spawning 'n' threads your main thread will wait for those threads to finish.
for (int i=0; i<n; i++) {
    global_sempahore.sem_wait();
}


// This is your worker thread routine.
// After processing the common work routine before exiting each thread will signal the sempahore.
global_sempahore.sem_post();

La idea es inicializar el sempahore en modo bloqueado con 0. Después del desove sus n subprocesos de trabajo a la espera del hilo principal en sempahore de n veces.

En subproceso de trabajo justo antes de la salida de señal del semáforo.

Esto asegurará que el hilo principal se despierta sólo cuando todos los n hilos terminado de ejecutarse.

Respondida el 20/12/2018 a las 06:12
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more