Dwa wątki jednocześnie

0

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

0

A jakiś przykładowy kod podasz ?

0

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.

0

Dlatego proszę o przykładowy kod żeby się przekonać

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)
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.

0

Najprosciej to przez OpenMP. W drugiej kolejnosci ew watki ze standardu c++11.

1 użytkowników online, w tym zalogowanych: 0, gości: 1