Ещё один пример создания потока в линукс си
Primary tabs
исходник взят отсюда ,
но я немного отформатировал код -а то там он "слабочитаем" для простых смертных =
#include stdio.h> #include errno.h> #include pthread.h> void * thread_func(void *arg) // главная и,собственно, есдиственная функция потока { int i; int loc_id = * (int *) arg; // получаем переданный в поток параметр for (i = 0; i < 4; i++) /* запускаем цикл, который будет выводит на экран строчку со значением параметра 4-ре раза*/ { printf("Thread %i is running\n", loc_id); sleep(10); // приостанавливаем мыполнение на 10 миллисекунд } } int main(int argc, char * argv[]) // функция , в рамках которой и будут создаваться новые потоки { int id1, id2, result; pthread_t thread1, thread2; id1 = 1; // пареметр который будем передавать главной функции ,вызываемого далее потока result = pthread_create(&thread1, NULL, &thread_func, &id1); // создаём 1-ый дочерний поток if (result != 0) // если создать поток не удалось { perror("Creating the first thread"); return EXIT_FAILURE; } id2 = 2;// пареметр который будем передавать главной функции ,вызываемого далее потока result = pthread_create(&thread2, NULL, &thread_func, &id2); // создаём 2-ой дочерний поток if (result != 0) { perror("Creating the second thread"); return EXIT_FAILURE; } result = pthread_join(thread1, NULL); // ждём завершения первой нити (=потока) if (result != 0) { perror("Joining the first thread"); return EXIT_FAILURE; } result = pthread_join(thread2, NULL); // ждём завершения второй нити (=потока) if (result != 0) { perror("Joining the second thread"); return EXIT_FAILURE; } printf("Done\n"); // выводим уведомление о заверщении работы return EXIT_SUCCESS; // возвращаем признак успешного завершения. }
- vedro-compota's blog
- Log in to post comments
- 6429 reads