Advertisement
xeritt

POSIX run k pthread with args example

Sep 11th, 2021
698
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // gcc main.c -o main -lpthread
  2. // ./main 3 12 10 11
  3. #include <stdio.h>
  4. #include <pthread.h>
  5. #include <stdlib.h>
  6.  
  7. void* func(void* data){ //потоковая функция
  8.     int n = atoi((char*)data);
  9.     for (int i = 0; i < n; i++){
  10.         printf("Поток id=%lu значение i=%d \n", pthread_self(), i);
  11.     }
  12.     pthread_exit(0); //завершаем поток
  13. }
  14.  
  15. int main(int argc, char** args){
  16.    
  17.     int k = argc-1; //кол-во потоков
  18.     pthread_t *tid = malloc(sizeof(pthread_t*)*k); //создаем идентификаторы потока
  19.  
  20.     //создаем потоки по идентификатору tid и функции потока func
  21.     //и передаем потоку указатель на данные args
  22.     for (int i = 0; i < k; i++){
  23.         pthread_create(&tid[i], NULL, func, args[i+1]);
  24.     }
  25.  
  26.     for (int i = 0; i < k; i++){    //ждем завершения потоков
  27.         pthread_join(tid[i], NULL);
  28.     }
  29.     free(tid);
  30.     return 0;
  31. }
Advertisement
RAW Paste Data Copied
Advertisement