Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

jedna funkcja na wielu wątkach

Ostatnio zmodyfikowano 2017-12-11 12:57
Autor Wiadomość
joysticko
Temat założony przez niniejszego użytkownika
jedna funkcja na wielu wątkach
» 2017-12-10 18:37:24
Dzień dobry, mam pytanie dotyczące wątków.
Załóżmy że mam pseudokod

void xyz(int param) {
...

}


int main(){

for (int i=0; i<n; i++){
xyz(n);
}


return 0;
}

Teraz pytanie: czy można i w jaki sposób zmienic ten kod tak, aby jeden wątek obsługiwał tę funkcję dla argumentów od 1 do n/2, a drugi wątek od n/2 do n elementów ?

Z góry bardzo dziękuje za odpowiedź.
P-167781
Rashmistrz
» 2017-12-11 12:57:33
Tak, zależnie od tego co robisz w funkcji xyz i czy
jest ona do zrównoleglenia, i tego czy jest to opłacalne.

Oh... Chyba źle zrozumiałem pytanie.
Wystarczy że w nowych wątkach będziesz miał po jednej pętli,
która każda z nich odpowiada za inną część wywołań.
Jeśli chcesz możesz przekazywać funkcję przez wskaźnik.

C/C++
// Example program
#include <thread>

void przyklad( int beg, int end )
{
    for(; beg < end; beg++ ) xyz();
   
}

int main()
{
    int n = 11; // przykladowo
    std::thread a( przyklad, 0, n / 2 ); // wykona od 0 do 4
    std::thread b( przyklad, 2 / n, n ); // wykona od 5 do 10
    // ------------------------------------
    a.join();
    b.join();
}

Pamiętaj, że funkcja xyz musi być thread-safe, jeśli pracuje na wspólnych zasobach.
Możesz użyć do tego mutex'ów, semaforów i innych bajerów z biblioteki <thread>.

P-167798
« 1 »
  Strona 1 z 1