Я пытаюсь реализовать этот простой пример того, как синхронизировать потоки, используя библиотеку pthread:
#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;
}
, что я должен увидеть, это func1 ждать, пока условие (ok == true) затем обработает func2.... но то, что я получаю, непредсказуемо и не синхронизировано !!!
любая помощь и спасибо в адвенсе