La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cómo utilizar el bloqueo mutex (mutex) para la sincronización de subprocesos de Linux? Gracias

¿Cómo utilizar el bloqueo mutex (mutex) para la sincronización de subprocesos de Linux? Gracias

El bloqueo Mutex (mutex) logra la sincronización entre subprocesos a través del mecanismo de bloqueo.

1. Inicializa el bloqueo. En Linux, el tipo de datos mutex del hilo es pthread_mutex_t. Antes de su uso, debe inicializarse.

2. Asignación estática: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

3. Asignación dinámica: int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_attr_t *mutexattr); , cerrar con llave. Para acceder a recursos compartidos, el mutex debe estar bloqueado. Si el mutex ya está bloqueado, el hilo de llamada se bloqueará hasta que se desbloquee el mutex. int?pthread_mutex_lock(pthread_mutex_t?*mutex);

int?pthread_mutex_trylock(pthread_mutex_t?*mutex);

Desbloquear. Después de completar el acceso al recurso compartido, se debe desbloquear el mutex.

int?pthread_mutex_unlock(pthread_mutex_t?*mutex);

Destruye el bloqueo. Una vez utilizado el bloqueo, es necesario destruirlo para liberar recursos.

int?pthread_mutex_destroy(pthread_mutex?*mutex);

#include?lt;cstdiogt;?

#include?lt;cstdlibgt;?

#include?lt;unistd.hgt;?

#include?lt;pthread.hgt;?

#include?"iostream"?

usando?namespace?std;?

pthread_mutex_t?mutex?=?PTHREAD_MUTEX_INITIALIZER;?

int?tmp;?

void*?thread(void ?*arg)?

{?

cout?lt;lt;?"thread?id?is?"?lt;lt;?pthread_self()?lt;lt; ?endl;?

pthread_mutex_lock(amp;mutex);?

tmp?=?12;?

cout?lt;lt;?"¿Ahora? a?is?"?lt;lt;?tmp?lt;lt;?endl;?

pthread_mutex_unlock(amp;mutex);?

return?NULL;?

pthread_mutex_unlock(amp;mutex);?

return?NULL;?

p>

}?

int?main()?

{?

pthread_t?id;?

cout? lt;lt;?"main?thread?id?is?"?lt;lt;? pthread_self()?lt;lt;?endl;?

tmp?=?3;?

cout?lt;lt;?"In?main?func?tmp?= ?"?lt;lt;?tmp?lt;lt;?endl;?

if?(! pthread_create(&id,?NULL,?thread,?NULL))?

{?

cout?lt;lt;?"¿Crear?tema?éxito!"?lt ;lt;?endl;?

}?

¿más?

{?

cout?lt;lt;?"¿Crear ?thread?failed!"?lt;lt;?endl;?

} ?

pthread_join(id,?NULL);?

pthread_mutex_destroy(amp;mutex);?

return?0;?

}?

//Compilación: g ?-o?thread?testthread.cpp?-lpthread