Posix Semaphores en C

Posix Semaphores en C

"Aunque cada lenguaje de programación tiene muchas bibliotecas para fines específicos, la Biblioteca Posix de C tiene su lugar. Ha sido diseñado para crear una gran armonización entre los procesos y ayuda mucho al uso de múltiples lecturas dentro de los programas, yo.mi., Creación de múltiples hilos y sincronizando su ejecución. Dentro de esta guía hoy, verá una ilustración simple del uso de Posix Semafores en C. Para los ejemplos básicos de código C, debemos configurar su compilador en el sistema. Pero, antes de eso, necesitamos actualizar el sistema, ya que es un paso necesario para la ejecución suave del código. Por lo tanto, la consulta que se muestra en el SNAP adjunto es imprescindible para actualizar y actualizar su sistema operativo Linux con la utilidad "APT"."


Este proceso requirió aproximadamente 55 kb de espacio en su plataforma Linux para realizar sin problemas las actualizaciones. Si está dispuesto a dar tanto espacio, toque "Y" para continuar. El procesamiento se completará en algunos minutos.


Después de que el sistema se actualizó por completo, vamos a configurar el compilador del idioma C en nuestro sistema con la utilidad APT-Get en el comando "Instalar". Use "GCC" como palabra clave, y eso es todo.

Sem_init ()

Se crearía un nuevo semáforo cuando ya hay un semáforo no identificado en "S"; de lo contrario, ese semáforo ya existente se descartará. A lo largo de este método, "S" significa una instancia de semáforo que se ha construido, y compartido es una señal o banderín que indica si el semáforo puede distribuirse con un método bifurcado () o de otra manera. El valor de entrada sirve como punto de partida establecido del semáforo.

Int sem_init (sem_t* s, int compartido, unsigned int value);

Sem_wait ()

Al ejecutar una acción de bloqueo de semáforo sobre el semáforo especificado por "S", el método SEM_WAIT () contiene ese semáforo. El procedimiento SEM-WAIT se utilizará para retener un semáforo o dejarlo en línea. Algunos de los procesos sobrecargados previamente se despiertan cuando algún otro proceso invoca SEM_POST ().

int sem_wait (sem_t *s);

Sem_post ()

Cuando se llama a SEM Post, el valor aumenta, y luego uno de las operaciones previamente respaldadas o en espera comienza a funcionar, yo.mi., Desbloquea el semáforo ya bloqueado.

int sem_post (sem_t *s);

Sem_destroy ()

Se destruye un semáforo sin nombre inicializado que se destruye empleando la función SEM Destro ().

int sem_destroy (sem_t *s);

Ejemplo

Para comprender los semáforos, primero vamos a crear un archivo C y luego agregarle un código. Para crear uno, use la consulta de "toque" y encontrará el nuevo archivo en la carpeta de inicio de su sistema.


Ahora, debe abrir su archivo C vacío con algún editor simple para generar un buen código en él. Hemos estado probando el editor "nano" hasta ahora, como se muestra en el complemento debajo.


Como todos sabemos, todos los lenguajes de programación no pueden funcionar sin bibliotecas, ya que estas bibliotecas tienen una gran cantidad de clases, estructuras, funciones y objetos que se utilizarán para que funcione el sistema general. Por lo tanto, estamos comenzando este programa C con el uso de algunas bibliotecas básicas y imprescindibles para los semáforos POSIX.

Para usar estas bibliotecas en el código, tenemos que usar el carácter "#" con la palabra clave "incluir" para cada biblioteca. En este momento, hemos agregado un total de 4 bibliotecas que deben tener en este programa. De lo contrario, nuestro programa no funcionará correctamente. El primer "stdio.H ”La biblioteca de encabezado suele ser imprescindible en cada programa C porque nos permite tener operaciones de entrada y salida en el código. Por lo tanto, lo estamos utilizando para agregar suavemente entradas y obtener salidas del código. La segunda biblioteca que estamos usando aquí es el "Pthread.h "Eso es imprescindible para el uso de la programación de hilos, yo.mi., múltiples lectura.

Usaremos esta biblioteca para crear hilos en un programa. La siguiente y más importante biblioteca en este código es el "Semafore.H ". Se ha utilizado para sincronizar suavemente los hilos. Por último, pero no menos importante, la biblioteca es "unistd.H ", que nos permite usar funciones y constantes definidas por el usuario. Ahora, hemos declarado el semáforo "S" utilizando el objeto incorporado "SEM_T" de la Biblioteca Semaphore. Aquí viene la función "t" definida por el usuario del subproceso sin tipo de retorno. Ha estado utilizando algunas funciones de semáforo incorporadas para realizar la sincronización. La función SEM_WAIT () está aquí para contener el Semaphore "S" usando el carácter "&".

Dentro de la Hold, la instrucción printf () se ejecutó junto con la función de "dormir" para que este programa duerma durante 4 segundos. Otra instrucción printf () muestra un nuevo mensaje, y la función SEM_POST () se ejecuta para liberar el bloqueo en Semafore "S."

#incluir
#incluir
#incluir
#incluir
sem_t s;
void * t (void * arg)
sem_wait (& s);
printf ("Bienvenido! \norte");
dormir (4);
printf ("adiós!\norte");
sem_post (& s);

Echemos un vistazo al método principal () de este programa C para semáforos. La función SEM_INIT () se ha utilizado aquí para crear un nuevo "S" semáforo que no se ha distribuido con un método bifurcado (), I.mi., "0", y su punto de partida se establece en 1. El objeto pthread_t de la biblioteca pthread de C se utilizó para crear dos hilos usando dos objetos de subprocesos, O1 y O2. La instrucción printf () está aquí para mostrar que vamos a crear el primer hilo usando la función pthread_create () en la siguiente línea.

Hemos estado pasando el objeto de hilo O1 a esta función con restricciones nulas y la función de llamadas "t" pasando en los parámetros. Después de un sueño de 4 segundos, se creó otro hilo con el objeto O2, y la función pthread_join () se utiliza aquí para unir los hilos con una función principal (). La función SEM_Destroy () está aquí para destruir el semáforo "S", y todos los hilos bloqueados también se lanzarán.

int main ()
sem_init (& s, 0, 1);
pthread_t o1, o2;
printf ("en un primer hilo ahora ... \ n");
pthread_create (& o1, null, t, null);
dormir (4);
printf ("en un segundo hilo ahora ... \ n");
pthread_create (& o2, null, t, null);
pthread_join (O1, nulo);
pthread_join (O2, nulo);
sem_destroy (& s);
regresar 0;

Estamos compilando el programa C con el compilador "GCC"; Las opciones "-lrt" y "-lpThread" se utilizan para ejecutar las funciones de hilo POSIX. Al ejecutar el ".a/.Out "consulta, el primer hilo se creó. Se va a dormir después de imprimir el primer mensaje.


El segundo hilo se sincronizó, y después de 4 segundos, el primer hilo se lanzó y el segundo hilo se bloqueó durante 4 segundos.


Al final, el segundo hilo también se lanzó.

Conclusión

Eso es sobre los semáforos Posix en C mientras utiliza algunas de sus funciones principales para sincronizar diferentes hilos. Después de pasar por este artículo, podrá entender a Posix cada vez más.