2011-12-22 7 views
2

Linux(Ubuntu)でMono/.Net 3.5を試しています。 Monoでスレッドを使用しようとしましたが、正しく動作していないようです。Monoでスレッドする

public static void Main (string[] args) 
{ 
    Thread thread =new Thread(()=> fn("first")); 
    Thread thread1=new Thread(()=> fn("second")); 
    thread.Start(); 
    thread1.Start(); 
} 

static void fn(string name) 
{ 
    for(int i=0;i<10;i++) 
     Console.WriteLine(i+" "+name); 
} 

スレッドを使用していないかのように、両方のループが順番に実行されます。

どうしたのですか?

+0

彼らはこのような小さなループでは、まず、おそらく二にも開始される前に完了しています – IanNorton

答えて

8

これをWindowsで実行すると、ほとんどの場合、すべての最初のスレッドの書き込みは2番目のスレッドの前に行われます。

ループはあまりにも些細なので、同時に実行されている複数のスレッドの影響を見ることはできません。第1スレッドは、第2スレッドが開始する前に単純に終了することができる。

メインループにスリープまたはスピンループを入れてみてください。

for(int i=0; i<10; i++) { 
    Console.WriteLine(i+" "+name); 
    Thread.Sleep(10); 
} 

または

for(int i=0; i<10; i++) { 
    Console.WriteLine(i+" "+name); 
    for(int j=0; j<100000; j++); 
}