Hirdetés
- gban: Ingyen kellene, de tegnapra
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- gerner1
- antikomcsi: Ázsia Expressz 5
- sziku69: Szólánc.
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Geri Bátyó: Agglegénykonyha 3 – Paradicsomos káposzta (amit amúgy utálok)
- Gurulunk, WAZE?!
- Imilenni: Egy kis depi, remélem elfér itt :) 2#
-
LOGOUT
Ú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!
- HP ProDesk 600 G1 SFF i5-4590 8GB DDR3 128GB SSD 500GB HDD HD Graphics 4600
- Airpods Max hibátlan dobozos eredeti!!
- Apple watch ultra 2 black edt. ÚJ 1 év Apple jótállás
- HP 255 G7 AMD Ryzen 3 3200U 8GB DDR4, 128GB SSD + 1TB HDD, Windows 11, 15.6 HD laptop
- Steelseries Arctis Nova Pro Wireless for PC & PlayStation
- Eladó Karcmentes állapotban levő Samsung A40 4/64GB / 12 hó jótállás
- Apple iPhone 12 128GB, Kártyafüggetlen, 1 Év Garanciával
- MacBook Pro 16" M3 Pro 36GB 512GB Gar. SPACE BLACK
- Samsung Galaxy S23 Ultra 256GB Kártyafüggetlen 1Év Garanciával
- HP Omen 80G8E9 - 27" IPS - UHD 4K - 144Hz 1ms - NVIDIA G-Sync - FreeSync - HDR 400 - USB Type-C
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest