Помощь в написании студенческих работ
Антистрессовый сервис

Последовательность действий. 
Основы применения операционной системы реального времени QNX

РефератПомощь в написанииУзнать стоимостьмоей работы

Как упоминалось ранее, с функцией pthreadJoin () рабочие потоки для синхронизации главного потока с ними должны умереть. В случае же с барьером потоки живут и чувствуют себя вполне хорошо. Фактически, отработав, они просто разблокируются по функции barrier_wait (). Тонкость здесь в том, что вы обязаны предусмотреть, что эти потоки должны делать дальше! В нашем примере с графикой мы не дали… Читать ещё >

Последовательность действий. Основы применения операционной системы реального времени QNX (реферат, курсовая, диплом, контрольная)

Основной поток создал объект типа «барьер» и инициализировал его значением счетчика, равным числу потоков (включая себя!), которые должны «встретиться» у барьера, прежде чем он «прорвется». В нашем примере этот индекс был равен 3 — один для потока main (), один для потока thread1() и один для потока thread2(). Затем, как и прежде, стартуют потоки вычисления графики (в нашем случае это потоки thread1() и thread2()). Для примера вместо приведения реальных алгоритмов графических вычислений мы просто временно «усыпили» потоки, указав в них sleep (20) и sleep (40), чтобы имитировать вычисления. Для осуществления синхронизации основной поток (таin ()) просто блокирует сам себя на барьере, зная, что барьер будет разблокирован только после того, как рабочие потоки аналогично присоединятся к нему.

Как упоминалось ранее, с функцией pthreadJoin () рабочие потоки для синхронизации главного потока с ними должны умереть. В случае же с барьером потоки живут и чувствуют себя вполне хорошо. Фактически, отработав, они просто разблокируются по функции barrier_wait (). Тонкость здесь в том, что вы обязаны предусмотреть, что эти потоки должны делать дальше! В нашем примере с графикой мы не дали им никакого задания для них — просто потому что мы так придумали алгоритм. В реальной жизни вы могли бы захотеть, например, продолжить вычисления.

Результаты

# root/a.out.

Start.

Potok 1, vremia starta Tue Oct 21 00:29:01 2003.

Potok 2, vremia starta Tue Oct 21 00:29:01 2003.

Main (): oshidanie y bariera, vremia Tue Oct 21 00:29:01 2003.

barier v potoke 2, vremia srabativania Tue Oct 21 00:29:07 2003.

barier v main (), vremia srabativania Tue Oct 21 00:29:07 2003.

barier v potoke 1, vremia srabativania Tue Oct 21 00:29:07 2003.

#/**.

Показать весь текст
Заполнить форму текущей работой