Menschen. Ich habe versucht, Mutex als Substitut für atomare Variablen zu verwenden, aber hat das Resut demonstriert, es scheint, dass der Mutex nicht instante ist, weil die "num" immer noch Zeit haben, sich halb zu ändern, was die if-Bedingung wahr macht. Funktioniert das so, oder mache ich gerade :().
Comente bitte .. thankes: Dpthread_mutex_lock ist nicht sofort ...?
#include <iostream>
#include <pthread.h>
#include <mutex>
using namespace std;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int num = 450;
void* print1 (void* e){
while(1){
if(num != 450 && num != 201){
cout << "num-> "<<num<<endl;
}
pthread_mutex_lock(&mutex);
Sleep(0.5);
num = 450;
pthread_mutex_unlock(&mutex);
}
}
void* print2 (void* e){
while(1){
if(num != 450 && num != 201){
cout << "num-> "<<num<<endl;
}
pthread_mutex_lock(&mutex);
Sleep(0.5);
num = 201;
pthread_mutex_unlock(&mutex);
}
}
int main(){
pthread_t* threads1;
threads1 = new pthread_t;
pthread_t* threads2;
threads2 = new pthread_t;
//-------------------------------------
pthread_create(threads1,NULL,print1,(void*)NULL);
pthread_create(threads2,NULL,print2,(void*)NULL);
pthread_join(*threads1,(void**)NULL);
pthread_join(*threads2,(void**)NULL);
return false;
}
Ergebnis:
num-> 450
num-> 450
num-> 450
num-> 450
...
Ich erwartete:
(blanck)...