C Програмування

Потік POSIX із програмуванням на C

Потік POSIX із програмуванням на C
Потік - це невеликий екземпляр, що працює в процесі. Потоки поєднуються для створення процесу, і вони мають деякі властивості процесу; тому їх вважають легкими процесами. Потік не є незалежним, як і процес. Швидше вони працюють разом над компіляцією та створенням процесу. Тим не менше, як і процес, потік також має власний ПК (лічильник програм) та певний набір регістрів разом із простором стека.

Потік 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. Користувачі можуть вибрати будь-який інший компілятор, виходячи зі своїх уподобань.

Безкоштовні ігри з відкритим кодом для розробки ігор Linux
У цій статті буде розглянуто перелік безкоштовних ігрових механізмів з відкритим кодом, які можна використовувати для розробки 2D та 3D ігор на Linux....
Підручник Тінь розкрадача гробниць для Linux
Shadow of the Tomb Raider - дванадцяте доповнення до серії Tomb Raider - франшизи екшн-пригодницької гри, створеної Eidos Montreal. Гру сприйняли як к...
Як збільшити FPS в Linux?
FPS означає Кадри в секунду. Завданням FPS є вимірювання частоти кадрів при відтворенні відео або ігрових виставах. Простими словами кількість безпере...