jedna funkcja na wielu wątkach
Ostatnio zmodyfikowano 2017-12-11 12:57
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ź. |
|
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. #include <thread>
void przyklad( int beg, int end ) { for(; beg < end; beg++ ) xyz(); }
int main() { int n = 11; std::thread a( przyklad, 0, n / 2 ); std::thread b( przyklad, 2 / n, n ); 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>. |
|
« 1 » |