Je suis en train de mettre en œuvre cet exemple simple de la façon de synchroniser les threads en utilisant la bibliothèque pthread:comportement imprévisible de threads
#include <iostream>
#include <pthread.h>
using namespace std ;
static pthread_mutex_t locker;
pthread_cond_t cond;
volatile bool ok=false;
void *func2(void *data)
{
int i;
for(i=0;i<100;i++)
{
pthread_mutex_lock (&locker);
cout << "1";
pthread_mutex_unlock(&locker);
if(i==10)
{
ok=true;
pthread_cond_signal(&cond);
}
}
pthread_exit(0);
}
void *fun1(void *data)
{
int i;
for(i=0;i<100;i++)
{
if(ok==false){
pthread_cond_wait(&cond, &locker);
}
pthread_mutex_lock (&locker);
cout << "2";
pthread_mutex_unlock(&locker);
}
pthread_exit(0);
}
int main(void)
{
pthread_t thread1, thread2;
void *retour_thread;
pthread_mutex_init (&locker, NULL);
pthread_cond_init(&cond, NULL);
if(pthread_create (&thread1, NULL, fun1, NULL) < 0)
{
cout << "problem thread";
exit(1);
}
if(pthread_create (&thread2, NULL, func2, NULL) < 0)
{
cout << "problem thread";
exit(1);
}
(void)pthread_join(thread1,&retour_thread);
(void)pthread_join(thread2,&retour_thread);
return 0;
}
que dois-je vois func1 attendre que la condition (ok == true) puis processus func2 ... mais ce que je reçois est imprévisible et non synchronisé !!!
toute aide et grâce à advence
Cela provoque un blocage. Il a également besoin de ne pas acquérir le verrou dans fun2. – Benubird
merci pour la réponse .. mais stil ne peut pas obtenir ce que je veux .... le comportement est aléatoire !!! vous pouvez l'essayer pour voir .... par la façon dont je suis sur Windows – fsidiosidi
@Bububird: pthread_cond_wait libère la serrure atomiquement, c'est pourquoi vous devez passer le verrou – stefaanv