Вопрос по c, multithreading, c++ – Странный порядок выполнения потоков в C ++

1

Я пытался выполнить первый пример изLinux Учебник по Posix Темы. That's what I have:

[[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
& Quot; Нить 1 & quot; и "Нить 2" выходные данные представляют не создание потоков, а операцию printf в функции потоков. После того как вы создадите потоки, операционная система сама решит, когда потоки получат время в процессоре. veefu
Почему бы и нет? как только вы выполняете параллельную обработку, все может происходить в любом порядке, в котором они хотят, если только вы не предпримете шаги, чтобы все произошло в определенном порядке. Marc B

Ваш Ответ

1   ответ
8

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

Error: User Rate Limit Exceeded

Похожие вопросы