Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

Laboratorio 5 Comunicación y Sincronización Hilos/Procesos

Enviado por   •  6 de Junio de 2018  •  3.540 Palabras (15 Páginas)  •  320 Visitas

Página 1 de 15

...

{

pthread_t tid[NUMTHREADS];

int i=0;

/* mutex init*/

if (pthread_mutex_init(&lock, NULL) != 0)

{

printf("\n mutex init failed\n");

return 1;

}

for( i=0; i<NUMTHREADS; i++){

pthread_create (&tid[i], NULL, &counting, NULL);

}

for( i=0; i< NUMTHREADS; i++){

pthread_join(tid[i], NULL);

}

/* mutex destroy*/

pthread_mutex_destroy(&lock);

printf("\nCounter must be in: %d\n", MAXCNT*NUMTHREADS);

printf("\nCounter value is: %.0f\n\n", counter);

return 0;

}

/* Function Thread*/

void* counting(void * unused) {

int i=0;

pthread_mutex_lock(&lock);

for(i=0; i<MAXCNT; i++)

counter++;

pthread_mutex_unlock(&lock);

return NULL;

}

* ¿Cuál es la diferencia entre el código del ejerció anterior y el presente?

* ¿Según el tema de la clase cuál es principio de funcionamiento de este código?

* Ejecute en varias ocasiones este código. ¿Se presenta alguna condición de carrera?

1.1.3 Semáforos

Para el uso de los semáforos se requiere incluir la librería semaphore.h. Un semáforo es representado por la variable sem_t. A continuación se listan operaciones que se pueden hacer con los semáforos y la forma de inicializarlos y eliminarlos dependiendo del tipo de semáforo.

1.1.3.1 Operaciones con semáforos

Función

sem_wait

Uso

#include <semaphore.h>

int sem_wait(sem_t *sem);

Descripción

La función sem_wait disminuye el contador del semáforo, si el valor del contador es 0 antes de disminuirlo, se realiza un bloqueo hasta que el contador aumente.

Datos de retorno

* 0, si el contador fue disminuido.

* -1, en caso de error.

Función

sem_trywait

Uso

#include <semaphore.h>

int sem_trywait(sem_t *sem);

Descripción

La función sem_trywait disminuye el contador del semáforo, si el valor del contador es 0 antes de disminuirlo, se retorna un -1 y el proceso continúa con su ejecución.

Datos de retorno

* 0, si el contador fue disminuido.

* -1, en caso de error.

Función

sem_post

Uso

#include <semaphore.h>

int sem_post(sem_t *sem);

Descripción

La función sem_post incrementa el contador del semáforo.

Datos de retorno

* 0, si el contador fue incrementado.

* -1, en caso de error.

Función

sem_getvalue

Uso

#include <semaphore.h>

int sem_getvalue(sem_t *sem, int *val);

Descripción

La función sem_getvalue copia el valor contador del semáforo en la dirección de memoria de la variable val.

Datos de retorno

* 0, si el contador fue incrementado.

* -1, en caso de error.

1.1.3.2 Operaciones para semáforos sin nombre

Función

sem_init

Uso

#include <semaphore.h>

int sem_init(sem_t *sem, int pshared, unsigned int val);

Descripción

Inicia el semáforo con el valor del contador igual a val (val >= 0), si pshared es igual a 0, solo los hijos creados por el mismo programa pueden acceder al semáforo, en caso contrario cualquier otro programa puede acceder al mismo.

Datos de retorno

* 0, si el semáforo fue inicializado.

* -1, en caso de error.

Función

sem_destroy

Uso

...

Descargar como  txt (23.5 Kb)   pdf (92.6 Kb)   docx (31.6 Kb)  
Leer 14 páginas más »
Disponible sólo en Essays.club