Laboratorio 5 Comunicación y Sincronización Hilos/Procesos
Enviado por Antonio • 6 de Junio de 2018 • 3.540 Palabras (15 Páginas) • 319 Visitas
...
{
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
...