Witam.
Mam pytanie czy w c++ da się robić 2 rzeczy naraz ?
Są do tego jakieś biblioteki albo coś ?
A jakiś przykładowy kod podasz ?
Przy czym pamiętaj, że nawet to co podał kolega @szweszwe nie gwarantuje, że rzeczy rzeczywiście będą się wykonywać jednocześnie, jedynie z punktu widzenia Twojego kodu rzeczy będą się wykonywać "równolegle", ale gwarancji na to nie masz.
Dlatego proszę o przykładowy kod żeby się przekonać
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)
#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.
Najprosciej to przez OpenMP. W drugiej kolejnosci ew watki ze standardu c++11.