<- Назад

Содержание

Многопоточность

Реализация в С

Пример

1 Многопоточность

2 Реализация в C (pthread.h)

В C потоки реализуются с помощью библиотеки pthread.h. Поток представлен типом pthread_t.

Создание потока осуществляется с помощью функции pthread_create:

int pthread_create(
	pthread_t *thread,
	const pthread_attr_t *attr,
	void *(*routine)(void *),
	void *arg
);

Параметры:

По умолчанию основной поток не ожидает завершения остальных. Чтобы дождаться окончания работы конкретного потока, используется функция pthread_join:

int pthread_join(
	pthread_t thread,
	void **retval
);

Параметры:

3 Пример

#include <pthread.h>
#include <stdio.h>

void *some_work(void *arg)
{
	for (int i = 0; i < 5; ++i) {
		puts(arg);
	}
	return NULL;
}

void *func2(void *arg)
{
	int m = 1;
	for (int i = 1; i < 3; i++) {
		m *= (int)arg * i;
		printf("%d\n", m);
	}
	void *res = (void *)m;
	return res;
}

int main(void)
{
	pthread_t thread1, thread2;
	void *t2_result;

	pthread_create(&thread1, NULL, some_work, "Hello World");
	pthread_create(&thread2, NULL, func2, (void *)12);

	pthread_join(thread1, NULL);
	pthread_join(thread2, &t2_result);

	printf("result: %d\n", (int)t2_result);
	printf("End...\n");
	return 0;
}

Вывод программы:

Hello World
Hello World
Hello World
Hello World
Hello World
12
288
result: 288
End...

<- Назад