Потік POSIX:
На платформах Linux стандартний API мов C і C ++ pthread для всіх видів потокових функцій. Він також відомий як потік POSIX, що дозволяє користувачам створювати безліч потоків для одночасного перебігу процесів. Найкраще застосовуватись у багатоядерних системах або процесорах для реалізації потоків на ядрі для досягнення системи.
Реалізація:
Необхідно включити цю pthread.h файл заголовка у сценарії спочатку. Це допоможе у використанні функцій бібліотеки pthreads. Щоб виконати файл c, виконайте такі команди
$ cc -pthread файл.c
АБО
$ cc -lpthread файл.c
Функції, визначені в бібліотеці pthreads, можуть включати:
pthread_create:
Він використовується для створення нового потоку
Параметри pthread_create:
Він має такі параметри:
нитка: Це діє як вказівник на ціле число без знака. Він повертає ідентифікатор потоку потоку, який утворився.
атрибути: Цей параметр діє як вказівник на структуру. Він використовується для визначення атрибутів потоку, який може бути політикою планування, адресою стека тощо.
start_routine: Цей параметр є покажчиком на підпрограму, реалізовану потоком.
аргумент: Цей параметр є покажчиком на void з різними аргументами на функцію, визначену на початку аргументу
Синтаксис:
>> int pthread_create(pthread_t * потік, const pthread_attributes_t * attr, void * (* start_routine) (void *), void * аргумент);
pthread_exit:
Він використовується для завершення або закінчення потоку
Параметри pthread_exit:
Метод, що використовується в кінці методу / процесу, приймає параметр retval, який є обов'язковим показником для цілого числа. Він зберігає статус потоку таким чином, що потік закінчується. Це має бути глобальна змінна. Це дозволить наступному потоку в рядку приєднатися до потоку, якщо він доступний.
Синтаксис:
>> void pthread_exit (void * retval);pthread_join:
Ця функція використовується під час очікування закінчення потоку.
Параметри для pthread_join:
Тут використовуються такі параметри:
thread_id: Це ідентифікатор нитки, на яку чекає нитка в рядку.
повернення_потоку: Це параметр, який діє як вказівник на конкретне місце, де ми визначили статус виходу.
Синтаксис:
>> int pthread_join (pthread_t thread_identification, void ** thread_return);pthread_self:
Це метод, який використовується для отримання ідентифікатора потоку, який зараз знаходиться в рядку.
Синтаксис:
>> pthread_t pthread_self (порожнеча);pthread_equal:
Цей метод використовується для порівняння, якщо два потоки еквівалентні чи ні. Якщо два потоки однакові, функція у відповідь поверне значення, відмінне від нуля.
Синтаксис:
>> int pthread_equal (pthread_t thread1, pthread_t thread2);pthread_cancel:
Цей метод використовується для надсилання запиту на скасування
Параметр для pthread_cancel:
Використовуваний параметр є обов’язковим для введення для скасування запиту.
Синтаксис:
>> int pthread_cancel (pthread_t threadName);pthread_detach:
Це метод, який використовується для відокремлення потоку. Йому не потрібен будь-який потік для приєднання до завершення. Усі ресурси, що працюють у потоці, звільняються, як тільки потік від’єднується.
Параметр pthread_detachr:
Це параметр, який приймає обов’язковий ідентифікатор потоку параметра. Це потрібно від’єднати.
Синтаксис:
>> int pthread_detach (потік pthread_t);Зразок коду:
Ось приклад коду, щоб показати реалізацію вищеописаної функції. Для компіляції цих функцій ми використовували компілятор gcc.
// Програма для показу функцій потоку#включати
#включати
#включати
// Виклик потоку POSIX, який повинен бути в системах UNIX / LINUX
pthread_t tid [2];
void * Функція (void * arg)
без знака long i = 0;
pthread_t id = pthread_self ();
if (pthread_equal (id, tid [0]))
// Умова рівності потоків
printf ("\ n Перший потік обробляється \ n");
ще
printf ("\ n Другий потік обробляється \ n");
// Обробляються нитки.
для (i = 0; i<(0x255);i++);
повернути NULL;
int main (void)
int i = 0;
помилка int;
// Створення нового потоку
поки я < 2)
помилка = pthread_create (& (tid [i]), NULL, & Function, NULL);
якщо (помилка != 0)
printf ("\ n Не вдалося створити ланцюжок: [% s]", strerror (помилка));
ще
printf ("\ n Потік успішно створений \ n");
// Нитка створена успішно
i ++;
сон (5);
повернути 0;
Код пишеться в текстовому редакторі; Ви можете використовувати будь-який редактор на ваш вибір. Потім збережіть його у своєму улюбленому місці.
Файл зберігається в комп'ютерній системі, після чого здійснюється доступ до нього. Збережений нами файл отримав назву test.c. Щоб отримати до нього доступ, введіть таку команду у вікні терміналу:
$ sudo gcc тест.c -lpthread
Далі, щоб виконати вихідні дані, введіть таку команду:
$ ./ а.назовні
Очікуваний результат:
Вихідні дані, отримані нами у відповідь на попередній код, показані нижче:
Висновок:
Підручник висвітлив основний процес створення потоку та обговорив усі загальновживані методи його створення. Потік - це екземпляр процесу. Потім ми пройшли користувачів через відомі параметри, що використовуються кожним процесом, разом із синтаксисами, щоб вони могли використовувати їх у своїх комп'ютерних програмах. Тут ми також поділилися прикладом коду як зразком, щоб краще зрозуміти ідею створення програми C на POSIX. Компілятором, який ми використовували, був gcc в системі Linux. Користувачі можуть вибрати будь-який інший компілятор, виходячи зі своїх уподобань.