Programación en C

Semáforos POSIX con programación en C

Semáforos POSIX con programación en C

POSIX se refiere a la interfaz portátil del sistema operativo, que es un estándar IEEE, desarrollado para ayudar a la portabilidad de diferentes aplicaciones. POSIX es un esfuerzo para construir una versión estandarizada común de UNIX a través de la colaboración de proveedores. Facilitaría la migración de aplicaciones entre plataformas de hardware si fueran efectivas. Hewlett-Packard está integrando POSIX en su versión 5 del sistema operativo MPE / iX con licencia.0 y HP / UXX versión 10.0, respectivamente (su UNIX).

El estándar POSIX tiene mucho más de diez partes, sin embargo, dos se pueden obtener fácilmente. POSIX.1 describe las interfaces de programación C (i.mi., una biblioteca de llamadas al sistema) para archivos, procedimientos y terminales de E / S. La biblioteca de paquetes C POSIX para plataformas POSIX es un marco de la biblioteca estándar C. Esto se establece al mismo tiempo que el estándar ANSI C. Para hacer que POSIX sea compatible con el estándar C, se han realizado varios intentos. POSIX proporciona funciones adicionales a las implementadas en el estándar C.

Semáforos POSIX

Un semáforo es una estructura de datos que se utiliza a menudo para sincronizar los procesos y ayudar a los subprocesos sin que interactúen entre sí para que funcionen juntos. La interfaz para semáforos está especificada por el estándar POSIX. No es parte de Pthreads. Sin embargo, la mayoría de UNIX que admiten Pthreads incluso proporcionan semáforos. En marcos similares a Unix, como Linux, los semáforos se combinan con colas de mensajes y memoria común debajo de los servicios de comunicación entre procesos (IPC). Los semáforos de framework V más antiguos y los semáforos POSIX modernos se convierten en dos tipos de semáforos. Las llamadas a POSIX Semaphore son mucho más fáciles que las llamadas a System V Semaphore. Aunque, los semáforos de System V son más fáciles de obtener, especialmente en plataformas anteriores tipo Unix. Es necesario conectar programas que utilicen semáforos POSIX a la biblioteca Pthread. Echaremos un vistazo a los semáforos POSIX en este artículo.

Por qué POSIX Semaphores?

Existe un gran problema en torno a los subprocesos, que es la "condición de carrera". Es una circunstancia en la que dos hilos buscan obtener y alterar la misma información, volviéndola conflictiva. Para evitar una condición de carrera, hemos estado usando semáforos durante mucho tiempo.

Los semáforos están disponibles en 2 tipos:

Semáforo binario:

También se reconoce como bloqueo mutex. Solo tendría dos valores posibles, 0 y 1. El valor se inicializará como 1. Se está utilizando para hacer cumplir numerosos procesos para resolver el problema grave de la sección.

Contando semáforo:

Su tamaño puede variar en un dominio sin restricciones. Se utiliza para tener autoridad sobre el acceso a recursos de numerosas instancias.

El marco POSIX de Linux tiene su repositorio Semaphore integrado. Para usarlo debemos:

Casi todos los métodos y formularios de POSIX Semaphore son prototipos o se especifican en 'Semaphore.h '. Usaremos el semáforo para describir una entidad u objeto como:

>> sem_t sem_name;

Aquí hay diferentes funciones que usaríamos en POSIX Semaphore.

Sem_init

Para inicializar un semáforo, debes usar el método sem_init. En esta función, sem corresponde a un objeto semáforo inicializado. Pshared es un banner o bandera que especifica si el semáforo se puede compartir con un procedimiento bifurcado () o no. Los semáforos compartidos no están actualmente reforzados por LinuxThreads. El valor del argumento es el valor inicial en el que se fija el semáforo.

>> int sem_init (sem_t * sem, int pshared, valor int sin signo);

Sem_wait

Usaremos el método sem-wait para mantener / bloquear un semáforo o hacerlo esperar. Si el semáforo tiene un valor negativo, el ciclo de llamada se bloqueará automáticamente. Siempre que cualquier otro hilo llame a sem_post, uno de los procesos ya obstruidos se despierta.

>> int sem_wait (sem_t * sem);

Sem_post

Usaremos el método sem_post para aumentar el valor de un semáforo. Al llamar, sem_post incrementará el valor y uno de los procesos ya obstruidos o en espera se despierta.

>> int sem_post (sem_t * sem);

Sem_getvalue

Si desea conocer el valor de un semáforo, debe usar la siguiente función sem_getvalue. Obtendrá el valor presente del semáforo y se colocará en el destino valp-apuntado.

>> Int sem_getvalue (sem_t * sem, int * valp);

Sem_destroy

Debería utilizar el método sem_destroy si desea destruir el semáforo. Si se va a producir la desaparición del semáforo, no habrá ningún hilo esperando en el semáforo.

>> Int sem_destroy (sem_t * sem);

Instale la utilidad GCC

Para compilar el código POSIX Semaphore C, debe tener la utilidad gcc instalada en su sistema Linux. Para este propósito, abra su terminal de comando y pruebe el siguiente comando.

$ sudo apt-get install gcc

Afirma tu acción golpeando Y.

Implementación de POSIX Semaphore con programación C en Ubuntu

Al principio, debe crear un nuevo archivo con un .extensión cpp en Ubuntu 20.04 sistema. Para esto, debe navegar hacia su Directorio de inicio y crear un nuevo archivo vacío llamado new.cpp. También puede crearlo usando el comando táctil en su terminal de comando.

Puedes ver que el nuevo.cpp se ha creado en el directorio de inicio.


Después de la creación del .cpp, ábralo como un editor de texto en su sistema Linux y escriba el siguiente código en este archivo tal como está. Después de eso, guárdalo y ciérralo.

Ejecute el programa POSIX Semaphore C en Ubuntu 20.04

Abra su terminal en Ubuntu 20.04 y ejecute el siguiente comando gcc seguido del nombre del archivo.

$ gcc nombre de archivo.c -lpthread -lrt

Hay 2 hilos formados, uno se forma después de 2 segundos del otro. Después de recibir el perno, el primer hilo duerme durante 4 segundos. Entonces, después de que se haya llamado, el segundo hilo no se unirá directamente, y esto aparecerá 4-2 = 2 segundos después de que se haya llamado. Aquí está el resultado:

Si no hubiéramos usado semáforo, de acuerdo con el cambio de contexto, el resultado podría haber sido como se observa:

Conclusión

En esta guía, se ha proporcionado una descripción detallada del uso de POSIXSemaphore con programación C en Ubuntu 20. Simplemente usando la biblioteca POSIX o Pthread en cierto código C, POSIX Semaphore se puede usar con bastante facilidad para evitar condiciones de carrera durante la codificación.

El botón de clic izquierdo del mouse no funciona en Windows 10
Si está utilizando un mouse dedicado con su computadora portátil o computadora de escritorio, pero el el botón izquierdo del mouse no funciona en Wind...
El cursor salta o se mueve aleatoriamente mientras escribe en Windows 10
Si descubre que el cursor del mouse salta o se mueve por sí solo, automáticamente, de manera aleatoria mientras escribe en una computadora portátil o ...
Cómo invertir la dirección de desplazamiento del mouse y los paneles táctiles en Windows 10
Ratón y Panel táctils no solo facilitan la informática, sino que también hacen que sea más eficiente y requieran menos tiempo. No podemos imaginar una...