lostyazilim
tr.link

C++ hakkında yardım.

3 Mesajlar 588 Okunma
lstbozum
tr.link

Happy Happy x Kullanıcı
  • Ü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;
}////////
 

 

wmaraci
reklam

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Ü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 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;
}
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al