Hi,
Mam pytanie: jeśli kilka wątków próbuje w jakiś sposób wpłynąć na tą samą zmienną to może mieć to bardzo niemiłe konsekwencje - ok!
Mam jednak pytanie czy może się coś niedobrego stać, gdy kilka wątków chce jedynie pobrać tą samą zmienną (bez jej modyfikacji) i wykorzystać ją do przemnożenia przez inną (niezależną) zmienną i zapisać wynik również do niezależnej zmiennej?
Chodzi mi o coś takiego:
double vectorX[N]; //tablica o rozmiarze N ze wspólnymi zmiennymi
double results[M]; //tablica o rozmiarze M gdzie będą zapisane wyniki sumy mnożeń (iloczynu skalarnego)
Object objects[M];
class Object
{
public:
Object(){vector = new double[N];}
double* vector; //wewnętrzny wektor
double* vectorX; //wskaźnik do zewnętrznego wektora
double* result; //wskaźnik do zmiennej, w której będzie zapisany wynik iloczynu skalarnego
set_result_and_ptr_to_var(double* result, double* ptr_to_vector)
{
this->result = result;
vectorX = ptr_to_vector;
}
void set_result()
{
for(int i=0; i<N; i++)
*result += vectorX[i]*vector[i];
}
};
//...
for(int i=0; i<M; i++)
objects[i].set_result(&results[i], vectorX);
for(int i=0; i<M; i++)
objects[i].set_result(); //**chciałbym, żeby każdy obiekt wywoałał się w innym wątku**
/*
Pytanie: czy jeśli każdy obiekt pobiera dane z tej samej tablicy (variables) -> mnoży je przez swoje
zmienne (wektor) -> a następnie zapisuje do wspólnej tablicy, ale do indywidualnego dla każdego obiektu pola, jest prawidłowe?
Czy wywołanie tej funkcji w oddzielnym wątku będzie prawidłowe? Czy jest tu jakieś niebezpieczeństwo?
*/