?
firsttime schrieb:
Habe ich mit dieser Konstellation den konkurrierenden Zugriff auf den globalen struct in Griff. Oder muss ich vor jeder Variablen ein Lock setzen?
struct data{
a,b,c,d;
}
...
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
..
void *PrintHello1(void *threadarg)
{
int b;
Zugriff auf globale Variable a;
int c = funktion(b);
}
void *PrintHello2(void *threadarg)
{
int b;
Zugriff auf globale Variable a;
int c = funktion(b);
}
funktion(b){
pthread_mutex_lock(&mutex);
a = a +1;
b = b + 3;
c..
d..
pthread_mutex_unlock(&mutex);
}
int main (int argc, char *argv[])
{
....
rc = pthread_create(&thread1, NULL, PrintHello1, (void *)&thread_data_array[t]);
rc = pthread_create(&thread2, NULL, PrintHello2, (void *)&thread_data_array[t]);
....
}
Warum schreibst Du 2 mal die gleiche Funktion? Wie wäre es mit:
struct data{
a,b,c,d;
}
...
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
..
void *PrintHello(void *threadarg)
{
int b;
Zugriff auf globale Variable a;
int c = funktion(b);
}
funktion(b){
pthread_mutex_lock(&mutex);
a = a +1;
b = b + 3;
c..
d..
pthread_mutex_unlock(&mutex);
}
int main (int argc, char *argv[])
{
....
rc = pthread_create(&thread1, NULL, PrintHello, (void *)&thread_data_array[t]);
rc = pthread_create(&thread2, NULL, PrintHello, (void *)&thread_data_array[t]);
....
}