Articles of mutex

Comment fournir une séquence de threads entrelacés pour montrer qu’un code se rompt et ne fournit pas une synchronisation parfaite?

Je sais ce que le code suivant fait et je sais pourquoi c’est un code cassé pour la synchronisation car il n’a qu’une seule variable conditionnelle alors qu’il nous en faut deux, mais je ne sais pas comment fournir une séquence de fils entrelacés pour le montrer ne fonctionne pas . Pouvez-vous montrer pourquoi ce […]

pthread_mutex_lock retourne un argument invalide

Je travaille sur du code C et je ne parviens pas à verrouiller un mutex. Le code fait un appel à une fonction et cette fonction verrouille un mutex pour s’assurer qu’un pointeur de fichier n’est pas écrasé. Cela fonctionne correctement pour plusieurs instances, probablement environ 10 à 20 appels distincts de la fonction appelée, […]

Mon mutex récursif vs pthread_mutex_t (type: récursif) (repost, push)

Je me demandais si je pouvais créer un type de mutex récursif seul avec un mutex PTHREAD_MUTEX_ERRORCHECK le résultat: typedef struct { pthread_mutex_t mutex; uint32_t deadlocks; } pthread_recursivemutex_t; int pthread_recursivemutex_init(pthread_recursivemutex_t *mutex) { int ret; pthread_mutexattr_t attr; mutex->deadlocks = 0; ret = pthread_mutexattr_init(&attr); if (ret != 0) { return ret; } (void)pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); ret = pthread_mutex_init(&mutex->mutex, […]

Variables de locking mutth pthread utilisées dans les instructions

Tout d’abord, j’ai un pressentiment qui dit que, dans une instruction if, si j’utilise la variable, cela revient à lire la variable, je dois donc la verrouiller également avec mutex (si un autre pthread pouvait le faire) . Ai-je raison de le verrouiller? L’exemple de situation de manière simplifiée est donné ci-dessous. dans un fil, […]

Comportement du mutex du fil

J’apprends C. J’écris une application avec plusieurs threads; Je sais que lorsqu’une variable est partagée entre deux ou plusieurs threads, il est préférable de verrouiller / déverrouiller à l’aide d’un mutex pour éviter les blocages et les incohérences de variables. Ceci est très clair lorsque je souhaite modifier ou afficher une variable. int i = […]

procs, fork () et mutex

Je veux créer n processus s’exécutant en parallèle et les faire verrouiller un mutex, incrémenter un compteur, puis les déverrouiller et les quitter. Voici mon code: #include #include #include #include #include #include #include pthread_mutex_t mutex; int main(int argc, char **argv) { if (argc != 2) return 0; int n = atoi(argv[1]); int i = 0; […]

Comment utiliser la variable de condition

Le livre Linux Programming Interface contient un morceau de code (producteur / consommateur) pour montrer comment fonctionne la variable de condition: static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; static int avail = 0; while (TRUE) { s = pthread_mutex_lock(&mtx); while (avail == 0) { /* Wait for something to consume */ s […]

Est-ce que pthread_cond_wait (& cond_t, & mutex); déverrouiller puis verrouiller le mutex?

J’utilise pthread_cond_wait(&cond_t, &mutex); dans mon programme et je me demande pourquoi cette fonction nécessite comme second paramètre une variable mutex. Est-ce que pthread_cond_wait() déverrouille le mutex au début (exécution de pthread_cond_wait() ) puis est verrouillé à la fin (juste avant de quitter pthread_cond_wait() )?

Mutex Pthread par groupe de threads

Je cherche la bonne solution pour protéger le groupe de threads, comme je le ferais normalement avec un seul thread, à savoir: les threads 1 et 2 peuvent verrouiller mutex M en même temps, ni mettre en veille ni mutex M. Le mutex M est opposé au thread 3. Ainsi, si le thread 3 verrouille […]

Rendement garanti avec pthread_cond_wait et pthread_cond_signal

En supposant que j’ai un programme C avec 3 threads POSIX, partageant une variable globale, un mutex et une variable de condition, dont deux exécutent le psuedocode suivant: …process data… pthread_mutex_lock( &mutex ); variable = data_ptr; pthread_cond_signal( &cond ); pthread_mutex_unlock( &mutex ); Et la troisième course: while(1) { while( variable == NULL ) { pthread_mutex_wait( […]