2012-04-28 72 views
1

我试着从Linux Tutorial Posix Threads执行第一个例子。 这就是我:在C++中执行线程的奇怪顺序

[[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 

的问题是,我预计将有输出,如源说:

Thread 1 
Thread 2 
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

为什么不呢?一旦你进行了并行处理,除非你采取措施使事情按照特定的顺序进行,否则事情可能以他们想要的任何顺序发生。 – 2012-04-28 14:17:44

+2

“线程1”和“线程2”输出不表示创建线程,而是表示线程函数中printf的操作。一旦创建了线程,就由操作系统来决定线程何时在处理器中获得时间。 – veefu 2012-04-28 14:22:49

回答

8

线程,顾名思义,是异步执行的(这一切都在OS调度器的心血来潮)。除非您明确使用同步机制,否则您不能假设他们相对于彼此执行的任何操作。

+2

由于涉及大量的缓冲,所以当涉及到打印到标准输出时,事情变得更加疯狂。 – suszterpatt 2012-04-28 14:34:11