Thread C: качественная нить для шитья по доступной цене
Thread C - это библиотека на языке программирования Си для работы с многопоточностью. Она позволяет создавать потоки выполнения в программах, что позволяет распределять нагрузку между несколькими ядрами процессора и повышать скорость работы программ.
Для использования библиотеки Thread C необходимо подключить соответствующий заголовочный файл:
#include
Затем можно создавать потоки с помощью функции pthread_create:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
Первым параметром передается указатель на идентификатор создаваемого потока, вторым параметром можно передать атрибуты потока (например, приоритет или статус отмены), третий параметр это указатель на функцию, которую должен выполнять поток, и последний параметр это аргументы для функции.
Пример создания потока:
#include
#include
#include
void *thread_function(void *arg)
{
int *value = (int*)arg;
printf("Thread started with value = %d\n", *value);
*value += 1;
printf("Thread ended with value = %d\n", *value);
return NULL;
}
int main(int argc, char *argv[])
{
pthread_t thread;
int value = 42;
if (pthread_create(&thread, NULL, thread_function, &value) != 0) {
printf("Error creating thread\n");
exit(1);
}
printf("Main thread started with value = %d\n", value);
value += 2;
printf("Main thread ended with value = %d\n", value);
pthread_join(thread, NULL); // Ожидаем завершения потока
return 0;
}
Здесь создается поток с помощью функции pthread_create, которая принимает адрес функции thread_function. Эта функция принимает в качестве аргумента указатель на интовую переменную, который затем используется внутри функции как значение. После создания потока значение переменной value в главном потоке изменяется. При выполнении потока его значение также изменяется. После завершения потока значение этой переменной печатается в главном потоке.
Когда главный поток завершает свою работу, он должен дождаться завершения созданного потока с помощью функции pthread_join:
int pthread_join(pthread_t thread, void **retval);
Первым параметром передается идентификатор потока, а вторым - указатель на пространство памяти, в которое будет записано значение возвращаемое потоком. Если значение не используется, можно передать NULL.
Thread C также предоставляет другие полезные функции для работы с потоками, такие как pthread_mutex_lock и pthread_mutex_unlock, которые позволяют обеспечить взаимное исключение при доступе к общим ресурсам.