threads thread pthread_create example computing c multithreading operating-system system-calls

pthread_create - thread computing



¿Qué se entiende por "bloqueo de llamada al sistema"? (3)

Le sugiero que lea este breve texto: http://files.mkgnu.net/files/upstare/UPSTARE_RELEASE_0-12-8/manual/html-multi/x755.html En particular, puede leer por qué el sistema de bloqueo Las llamadas pueden ser una preocupación con hilos, no solo con procesos concurrentes:

Esto es particularmente problemático para las aplicaciones de subprocesos múltiples, ya que el bloqueo de un subproceso en una llamada del sistema puede demorar indefinidamente la actualización del código de otro subproceso.

Espero eso ayude.

¿Cuál es el significado de "bloqueo de llamada al sistema"?

En mi curso de sistemas operativos, estamos estudiando programación multihilo. No estoy seguro de lo que significa cuando leo en mi libro de texto "puede permitir que otro hilo se ejecute cuando un hilo hace una llamada al sistema de bloqueo"


Para una llamada de sistema bloqueada, la persona que llama no puede hacer nada hasta que la llamada del sistema regrese. Si la llamada al sistema puede ser prolongada (p. Ej., Implica IO de archivo o IO de red), esto puede ser algo malo (p. Ej., Imagine que un usuario frustrado golpea un botón "Cancelar" en una aplicación que no responde porque ese hilo está bloqueado esperando un mensaje paquete de la red que no llega). Para solucionar ese problema (para hacer un trabajo útil mientras espera a que vuelva una llamada del sistema de bloqueo), puede usar subprocesos; mientras que un subproceso está bloqueado, los otros subprocesos pueden continuar haciendo un trabajo útil.

La alternativa es el bloqueo de llamadas al sistema. En este caso, la llamada al sistema regresa (casi) inmediatamente. Para llamadas de sistema prolongadas, el resultado de la llamada de sistema se envía a la persona que llama más tarde (p. Ej., Como algún tipo de evento o mensaje o señal) o se consulta por la persona que llama más tarde. Esto le permite tener un solo hilo en espera de que se completen muchas llamadas de sistema prolongadas al mismo tiempo; y evita la molestia de los hilos (y el bloqueo, las condiciones de carrera, la sobrecarga de los interruptores de hilo, etc.). Sin embargo, también aumenta la molestia relacionada con obtener y manejar los resultados de la llamada al sistema.

Es (casi siempre) posible escribir un envoltorio no bloqueante alrededor de una llamada del sistema de bloqueo; donde el contenedor genera un subproceso y regresa (casi) inmediatamente, y el subproceso generado realiza la llamada al sistema de bloqueo y envía los resultados de la llamada al sistema al llamador original o los almacena donde el llamante original puede sondearlos.

También es (casi siempre) posible escribir una envoltura de bloqueo alrededor de una llamada de sistema no bloqueante; donde el envoltorio hace la llamada al sistema y espera los resultados antes de que regrese.


Una llamada al sistema de bloqueo es una que debe esperar hasta que se pueda completar la acción. read() sería un buen ejemplo: si no hay ninguna entrada preparada, permanecerá allí y esperará hasta que aparezca (siempre que no la hayas configurado como no bloqueante, en cuyo caso no sería un bloqueo de llamada al sistema). Obviamente, mientras un subproceso está esperando en una llamada de sistema de bloqueo, otro subproceso puede estar desactivado haciendo otra cosa.