- 
                    Üyelik
                    15.01.2021
                
 
                - 
                    Yaş/Cinsiyet
                    21 / 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
                    39 / 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;
}