Читайте также: |
|
Самый простой метод синхронизации — это «присоединение» (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 | Нарушение авторских прав