Порядок выполнения потоков в pthreads

В следующей программе, каковы возможности для упорядочения потоков? При условии "функция» напечатает идентификатор потока, который является уникальным (так как здесь у нас есть только один процесс). Я всегда получаю заказ th1, th2!

#include 
#include 
#include 
int main()
{
            pthread_t th1;
            pthread_t th2;
            pthread_create(&th1, NULL, function, NULL);
            pthread_create(&th2, NULL, function, NULL);
            pthread_join(th1, NULL);
            pthread_join(th2, NULL);
}

   return 0;
}

Ответы на вопрос(4)

кофе и поэтому начинает немного позже с той же самой задачей, что и другой (хорошо занимает время для чайника). Затем этот рабочий стреляет по всем цилиндрам, но кофе начинает действовать. Необходимо использовать туалет. Так что тот, который начался раньше, закончил первым, но провел больше времени, работая. Если бы только у этого работника было ведро ?!

начать делать это, Соединения говорятждать, пока это не будет сделано ".

Теперь вы говорите ОС "сделай это" а также "сделай это", ОС может выбрать любой заказ. Но большую часть времени он будет делать это в том порядке, в котором вы сказали.

Это'Это как заказать две самми в метро. 99% времени выЯ сделаю их в том же порядке, в каком вы их просили. Но каждую голубую луну ты выигралт. Но вы все еще ждете их обоих, прежде чем платить :)

Решение Вопроса

pthread_join(th1, NULL); не вернется, пока не завершится поток 1 иpthread_join(th2, NULL); не вернется, пока не завершится поток 2. Следовательно,main() функция не вернется (и процесс не завершится), пока не завершится как поток 1, так и поток 2.

Между потоком 1 и потоком 2 не установлено никакого порядка - их выполнение может произвольно чередоваться.

 Sara18 июн. 2013 г., 07:28
Спасибо @caf, так что вы имеете в виду "только" вероятность это th1, th2 ?!
 caf18 июн. 2013 г., 07:34
@sweet: Нет. Нет никакого порядка, наложенного между потоком 1 и потоком 2.

что будет какой-то конкретный заказ. Потоки на современных машинах выполняются параллельно и не определено, какой потокОператоры печати будут выполнены первыми!

Единственным ограничением порядка, которое можно предположить, является то, что поток 2 будет предшествовать потоку 1 из-за второго pthread_join

 starmole18 июн. 2013 г., 07:27
Нет заказа. Большую часть времени это сделаетСначала, но нет никакой гарантии.
 caf18 июн. 2013 г., 07:32
pthread_join() вызовы не вызывают никакого упорядочения между выполнением потока 1 и потока 2. В этом случае все, что они заставляют, - это то, что оба потока 1 и поток 2 должны выйти до выхода из основного потока.
 voidMainReturn18 июн. 2013 г., 07:26
это из-за заявления pthread_join
 Sara18 июн. 2013 г., 07:26
Спасибо, Техас. Я ожидал, но я получаю только один заказ, который th1, th2 и ямне интересно узнать причину!

Ваш ответ на вопрос