-
Fototrend

Új hozzászólás Aktív témák
-
BProgrammer
lelkes újonc
Sziasztok!
Próbálgatom a párhuzamos programozást C++-ban és nem értem a következő működést:
Elindítok 2 szálat, az egyiken 2000000000-szor növelgetek egy globális változót, a másikat 2 másodperces sleep-pel indítom majd egyszer csak beduplázom ugyanazt a változót konkurensen, miközben az increment még nem ért véget. Közben kiírogatom a dolgokat, ellenőrzöm a 2 másodperc sleep után még valóban nem ér véget az increment sose az én gépemen. Látszik is, hogy kb. beduplázódik a szám, valamikor a futás közben. Szóval azt várnám, hogy a legvégén, mire mindkét szál lefut, valami 2000000000-nál határozottan nagyobb szám lesz az eredmény minden esetben. Valamikor tényleg ez is van, de nagyon sokszor van, hogy pontosan 2000000000 az eredmény. De ez hogy lehet, hiszen nem akkor fut le soha a duplázás, mikor az n még 0 (ellenőrzöm a kiiratással). Arra is gondoltam, hogy hátha valami optimalizáció van, hogy valójában nem fut le 2000000000-szor a ciklus, hanem az i helyett magát a num-ot nézi, hogy ha az nagyobb, akkor kilép a ciklusból, de akkor meg máskor mér lehet nagyobb? Meg hát -O0 kapcsolóval is ugyanaz a probléma.Meg amit végképp nem értek, hogy egyszer volt olyan is, hogy nem duplázta be a számot, és a duplázás előtti és utáni kiíratás csak pár incrementálásban különbözött. Szóval eléggé össze vagyok zavarodva. Van ötletetek?
Előre is köszi a válaszokat!


#include <iostream>#include <thread>#include <chrono>using namespace std::chrono_literals;unsigned int num = 0;void increment(){std::cout<<"Starting increment "<< num << std::endl;for(int i=0; i<2000000000; ++i){++num;}std::cout<<"Ending increment "<< num << std::endl;}void doubler(){std::this_thread::sleep_for(2s);std::cout<<"Double starting " << num << std::endl;num*=2;std::cout<<"Double ending " << num << std::endl;}int main() {std::thread t1(increment);std::thread t2(doubler);t1.join();t2.join();std::cout << num << std::endl;
}
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Synology NAS
- exHWSW - Értünk mindenhez IS
- Diablo IV
- Apple MacBook
- Tesla topik
- Kormányok / autós szimulátorok topikja
- Warhammer 40.000
- Visszatérnek a Samsung tervezte CPU-magok és GPU az Exynos 2800-ban?
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Vezetékes FÜLhallgatók
- További aktív témák...
- Huawei Watch GT3 46mm Rozsdamentes acél váz, számlás, dobozos
- JBL Boombox 2 Brutális hang, számlás, dobozos, patika állapot
- Apple iPod Video (5. Gen) 30GB - A1136 - Wolfson DAC - Gyűjtői állapot!
- Asus Dual Radeon RX 5500 XT EVO 8GB GDDR6 Számlás, dobozos, újszerű!
- Canon EOS M50 Mark II Travel Kit Számlás (2023), újszerű, minden tartozékkal! (~600 expo)
- Xbox One S 500 GB + Series kontroller 6 hó garancia, számlával!
- ÁRGARANCIA!Épített KomPhone i5 14400F 32/64GB RAM RX 9060 XT 16GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 14 Pro 128GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen
- PC konfig /Ryzen 7 9800X3D, 32GB RAM, 1TB SSD/ akciós áron eladó! BeszámítOK!
- Sony TA-F830ES erősítő + Sony ST-S730ES rádió tuner
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


