Dwa wątki jednocześnie

Odpowiedz Nowy wątek
2019-02-16 22:47
0

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

Pozostało 580 znaków

2019-02-16 22:52
2019-02-16 23:11
0

A jakiś przykładowy kod podasz ?

Pozostało 580 znaków

2019-02-16 23:13
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.

Pozostało 580 znaków

2019-02-16 23:19
0

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

Pozostało 580 znaków

2019-02-16 23:19
0

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)

Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
edytowany 3x, ostatnio: superdurszlak, 2019-02-16 23:23

Pozostało 580 znaków

2019-02-17 00:04
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.


Nie pisz na priv. Zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: YooSy, 2019-02-17 00:09

Pozostało 580 znaków

2019-02-17 07:25
0

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


Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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