¿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;? p>
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