Witam.
Mam pytanie czy w c++ da się robić 2 rzeczy naraz ?
Są do tego jakieś biblioteki albo coś ?

- Rejestracja:ponad 11 lat
- Ostatnio:9 dni
- Lokalizacja:Kraków
- Postów:1694

- Rejestracja:prawie 7 lat
- Ostatnio:około 2 godziny
- Lokalizacja:Kraków
- Postów:2000
1
Nie obracam się raczej w świecie C++, ale możesz skorzystać np.
- z wątków POSIX (pthreads)
- z wątków które weszły bodajże w standardzie C++11, a wcześniej były chyba w Boost
- jak chcesz naprawdę duuuuużo wątków, możesz spróbować powalczyć z OpenCL. Jak napiszesz kernel i zapuścisz go sobie na GPU, to prawie na pewno program będzie robił 32 i więcej rzeczy jednocześnie. Jest tylko mały kruczek: jednocześnie będzie robione 32 i więcej tych samych rzeczy, na różnych danych. Grupa SIMD/SIMT/warp/wavefront na GPU działa w synchronizacji sprzętowej, więc zawsze robią to samo, chyba że część nie robi nic (bo dla niektórych danych jakiś if się nie wykona i wątki będą mieć puste przebiegi, podczas gdy inne będą wykonywać tego ifa)
edytowany 3x, ostatnio: superdurszlak

- Rejestracja:ponad 7 lat
- Ostatnio:ponad 5 lat
- Postów:472
1
#include <future>
#include <thread>
#include <iostream>
#include <string>
#include <chrono>
using namespace std::chrono_literals;
void Print(const std::string& str) {
for (std::size_t i = 0; i < 100; ++i) {
std::cout << str << ' ';
std::this_thread::sleep_for(100ms);
}
}
void Func1() {
Print("fn1");
}
void Func2() {
Print("fn2");
}
int main() {
std::future<void> ftr(std::async(Func1));
Func2();
return 0;
}
https://wandbox.org/permlink/bGKeEJugpSZ5iUTF
Jak widać w wydruku, wypisanie danych nie jest naprzemienne z obu funkcji, tylko czasem jedna z nich wykonuje dwa obroty pętli.
A to czy coś wykona się równolegle zależy od tego czy system przydzieli jakieś wolne wątki do obsługi zadania. W skrajnym przypadku
funkcje mogą wykonać się jedna po drugiej.
edytowany 1x, ostatnio: YooSy
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.