-
Üyelik
15.01.2021
-
Yaş/Cinsiyet
20 / E
-
Meslek
Öğrenci
-
Konum
Ankara
-
Ad Soyad
x** x**
-
Mesajlar
51
-
Beğeniler
12 / 7
-
Ticaret
1, (%100)
Selam. C++ ile Thread uygulaması yapmaya calısıyom ama bi turlu mantıgı anlayamadım. iki tane thread olusturup join ediyorum fonksiyonlar sıra sıra calısıyo. Thread kullanmadan çagırınca da sıra sıra calısıyo acaba bi yerde hata mı yapıyom.
Acaba su 2 kod arasında ne fark var.
1. Kod
/////////////////////////////////////////////////////
#include // std::cout
#include // std::thread
void foo()
{
// do stuff...
}
void bar(int x)
{
// do stuff...
}
int main()
{
std::thread first (foo); // spawn new thread that calls foo()
std::thread second (bar,0); // spawn new thread that calls bar(0)
std::cout << "main, foo and bar now execute concurrently...\n";
// synchronize threads:
first.join(); // pauses until first finishes
second.join(); // pauses until second finishes
std::cout << "foo and bar completed.\n";
return 0;
}
2. Kod
//////////////////////////////////////////
#include // std::cout
void foo()
{
// do stuff...
}
void bar(int x)
{
// do stuff...
}
int main()
{
std::cout << "main, foo and bar now execute concurrently...\n";
foo();
bar(0);
std::cout << "foo and bar completed.\n";
return 0;
}////////
-
Üyelik
25.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Engineering Director
-
Konum
İstanbul Avrupa
-
Ad Soyad
T** C**
-
Mesajlar
771
-
Beğeniler
2 / 260
-
Ticaret
0, (%0)
İki kod arasındaki fark.
1. kod :
1. kod çalışırken işletim sistemi mevcut main metodunu çalıştırırken 1 adet main thread açıyor.
1 adet main thread ise içerisindeki fonksiyonları çalışıtırırken, önce bir thread ayağa kaldırıyor ve al bu metodu çalıştır diyor.
1. kodda 3 adet thread ile işlemi yapıyorsun.
hangi thread önce çalışacak, ona cpu karar verir bu örnekte, genelde 1 çıkması normaldir, ilk memory'de stack'te onu çalıştırıyorsun. Bir loop'un içine alıp aynı kodu çalıştır, ara ara 1-2 sırası değiştiği anlar olacaktır.
thread açtıktan sonra join gracefull bir şekilde kapatmakta fayda var.
2. kod :
1 main thread te sırası ile iki ayrı metod çağrımı yapılmış.
çıktılarının aynı olması normal
----
Yukarıda kod bloğunun içinde bir niyet okuyarak, yorumlarda bulundum ama amacın ya da beklentin nedir?
https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)
30845
WM Aracı
Anonim Üyelik
-
Üyelik
02.03.2014
-
Yaş/Cinsiyet
- /
-
Meslek
-
Konum
-
Ad Soyad
** **
-
Mesajlar
192
-
Beğeniler
23 / 20
-
Ticaret
6, (%100)
C modunda örnek
#include
#include
DWORD thread;
DWORD WINAPI mThread(LPVOID param)
{
int lp=(int)param;
while(1)
{
printf("%c\n",lp);
Sleep(1000);
if(lp == 'g')
ExitThread(0);
++lp;
}
}
int main(int argc, char *argv[])
{
int a='a',b='b';
CreateThread(NULL, 0, mThread,(LPVOID)a, 0, &thread);
Sleep(500);
CreateThread(NULL, 0, mThread,(LPVOID)b, 0, &thread);
getchar();
return 0;
}