2012-04-28 3 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

Почему бы и нет? как только вы будете проходить параллельную обработку, все может случиться в любом порядке, если вы не предпримете шаги, чтобы сделать вещи в определенном порядке. –

+2

Выходы «Thread 1» и «Thread 2» не представляют собой создание потоков, а работу printf в функции потока. Создав потоки, операционная система должна решить, когда потоки получат время в процессоре. – veefu

ответ

8

Темы, по определению, выполняются асинхронно (все это по прихоти планировщика OS). Вы не можете ничего предположить о том, как они выполняются по отношению друг к другу, если вы явно не используете механизмы синхронизации.

+2

И все становится еще более сумасшедшим, когда дело доходит до печати на стандартном выходе из-за большого количества буферизации. – suszterpatt

Смежные вопросы