Va llamando select () / pselect () en la rosca secundaria causa principal hilo al bloque?

StackOverflow https://stackoverflow.com/questions/4504377

  •  12-10-2019
  •  | 
  •  

Pregunta

Tengo una aplicación que estoy trabajando en que requiere un par de hilos secundarios, y cada uno será responsable de una serie de identificadores de archivo (por lo menos 1, más de 10). Los identificadores de archivo no son compartidos entre los hilos, por lo que no tiene que preocuparse por un hilo secundario bloqueando la otra cuando selecting para ver lo que está listo para leer / escribir. Lo que quiero es estar seguro de que ninguno de los hilos secundarios hará que el hilo principal para detener la ejecución mientras la llamada select / pselect está ejecutando.

Me imagino que esto no es un problema - uno podría imaginar que tales cosas se llevaría a cabo en, por ejemplo, un servidor web - pero no pude encontrar nada que específicamente ha dicho "sí, se puede hacer esto" cuando buscado en Google. Estoy en lo correcto en mi suposición de que esto no causará ningún problema?

Para mayor claridad, lo que tengo se ve algo como:

  • principal hilo de ejecución (circular select() manejo de mensajes de órdenes entrantes y salientes respuestas)

  • rosca secundaria # 1 (select() bucle que proporciona un servicio)

  • rosca secundaria # 2 (select() bucle proporcionando otro servicio)

Como he mencionado anteriormente, ninguno de los identificadores de archivo son compartidos entre los hilos -. Que se crean, utiliza, y destruido dentro de un hilo individual, con los otros hilos ignorantes de su existencia

¿Fue útil?

Solución

No, no tiene que preocuparse de ellos bloqueando el hilo principal. He utilizado seleccione en múltiples hilos en diversos proyectos. Como siempre que tengan distintas fdsets entonces está bien y cada uno puede ser utilizado como un bucle de eventos independientes.

Otros consejos

No es seleccionar supone para bloquear todo el proceso? ¿Ha tratado de establecer el modo sin bloqueo en el zócalo?

También, ver página del manual select_tut un poco de ayuda.

Aquí hay una sección correspondiente de la página de manual select_tut:

So what is the point of select()? Can't I just read and write to my descriptors whenever I want? The point of select() is that it watches multiple descriptors at the same time and properly puts the process to sleep if there is no activity.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top