В C потоки реализуются с помощью библиотеки pthread.h. Поток представлен типом pthread_t.
Создание потока осуществляется с помощью функции pthread_create:
int pthread_create(
pthread_t *thread,
const pthread_attr_t *attr,
void *(*routine)(void *),
void *arg
);
Параметры:
void * и возвращает void *. Для передачи нескольких аргументов можно использовать структуру.По умолчанию основной поток не ожидает завершения остальных. Чтобы дождаться окончания работы конкретного потока, используется функция pthread_join:
int pthread_join(
pthread_t thread,
void **retval
);
Параметры:
#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...
<- Назад