Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Синхронизация



Читайте также:
  1. Вспышка: высокоскоростная синхронизация.
  2. Добавление к тексту эффектов появления и исчезания и его синхронизация с видео
  3. Зачем нужна высокоскоростная синхронизация?
  4. ЛР №6. Рисование масок, синхронизация движений между слоями
  5. Синхронизация и локализация СКМ
  6. Синхронизация кольцевой сети SDH

 

Самый простой метод синхронизации — это «присоединение» (joining) потоков. Реально это действие означает ожидание завершения.

Присоединение выполняется одним потоком, ждущим завершения другого потока. Ждущий поток вызывает pthreadjoin():

#include <pthread.h>

int

pthread_join (pthread_t thread, void **value_ptr);

 

Функции pthreadjoin() передается идентификатор потока, к которому вы желаете присоединиться, а также необязательный аргумент value_ptr, который может быть использован для сохранения возвращаемого присоединяемым потоком значения. (Вы можете передать вместо этого параметра NULL).

Где нам брать идентификатор потока?

В функции pthread_create() в качестве первого аргумента указатель на pthread_t. Там и будет сохранен идентификатор вновь созданного потока.

 

2.2.2 Текст программы

 

#include <stdio.h>

#include <pthread.h>

#include <sys/neutrino.h>

 

pthread_t thread_id1;

pthread_t thread_id2;

 

void * long_thread1(void *notused)

{

int n;

for(n=0;n<5;n++)

{

printf("Eto pervii potok, TID %d - N povtora %d \n", thread_id1, n);

sleep(2);

}

}

 

void * long_thread2(void *notused)

{

int m;

for(m=0; m<5; m++)

{

printf("Eto vtoroi potok, TID %d - N povtora %d \n", thread_id2, m);

sleep(1);

}

}

 

int main(void)

{

 

printf("Prog threads PID %d \n",getpid());

 

pthread_create(&thread_id1, NULL, long_thread1, NULL);

pthread_create(&thread_id2, NULL, long_thread2, NULL);

 

sleep(40);

 

return(1);

}

2.2.3 Последовательность действий

 

В программе создаются и запускаются на исполнение два потока. Когда один поток приостанавливается, сразу начинает работу другой. Приостановка реализована функцией sleep(n), которая останавливает процесс на n секунд. На экране можно наблюдать, как по очереди работают два процесса.

2.2.4 Результаты

 

# gcc pthread.c

# `pwd`a.out

Prog threads PID 852000

Eto pervii potok, TID 0 - N povtora 0

Eto vtoroi potok, TID 0 - N povtora 0

Eto vtoroi potok, TID 3 - N povtora 1

Eto pervii potok, TID 2 - N povtora 1

Eto vtoroi potok, TID 3 - N povtora 2

Eto vtoroi potok, TID 3 - N povtora 3

Eto pervii potok, TID 2 - N povtora 2

Eto vtoroi potok, TID 3 - N povtora 4

Eto pervii potok, TID 2 - N povtora 3

Eto pervii potok, TID 2 - N povtora 4

#

 

2.3 Лабораторная работа №3 «Обмен сообщениями»

2.3.1 Теоретические сведения


Дата добавления: 2015-07-11; просмотров: 200 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.007 сек.)