2012-04-28 7 views
1

Linux Tutorial Posix Threadsから最初の例を実行しようとしました。私が持っているものだ :C++でスレッドを実行する奇妙な順序

Thread 1 
Thread 2 
Thread 1 returns: 0 
Thread 2 returns: 0 

それがなぜ起こるか私は理解していない:

[[email protected] c_c++]$ g++ -lpthread from.cpp 
from.cpp: In function ‘int main()’: 
from.cpp:10:22: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
from.cpp:11:22: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
[[email protected] c_c++]$ ./a.out 
Thread 2 
Thread 1 
Thread 1 returns: 0 
Thread 2 returns: 0 

問題は、ソースが言うように、私は、出力が期待ということです。誰でも助けてくれますか?

[[email protected] c_c++]$ uname -a 
Linux Allok 3.3.2-1-ARCH #1 SMP PREEMPT Sat Apr 14 10:08:43 UTC 2012 i686 AMD Athlon(tm) II Neo K125 Processor AuthenticAMD GNU/Linux 
+11

なぜですか?一度並列処理をすると、特定の順序で何かが起こるような手順を踏んでいない限り、必要な順序で何かが起こります。 –

+2

「スレッド1」と「スレッド2」の出力は、スレッドの作成を表すのではなく、スレッド関数のprintfの操作を表します。スレッドを作成したら、スレッドがプロセッサで時間を取得するタイミングを決定するのは、オペレーティングシステムによって異なります。 – veefu

答えて

8

スレッドは、定義上、非同期で実行されます(すべてがOSスケジューラの気まぐれです)。同期メカニズムを明示的に使用しない限り、互いの実行方法については何も想定することはできません。

+2

バッファリングの膨大な量が含まれているため、標準出力に印刷する場合には、さらに気になることがあります。 – suszterpatt