Pthread id не отображается и код генерирует неверный вывод - PullRequest
0 голосов
/ 03 декабря 2018

Постановка проблемы

Программирование и компиляция и запуск на C программы для Linux

Программа для создания трех потоков

Поток 1

Поток 2

Поток 3.

параллельный запуск этих потоков

Каждый поток отобразит свой идентификатор процесса и потока.

* Потоки будут иметь дополнительные функции

output \

В потоке 1 будет отображаться строка.

В потоке 2 будет отображаться строка

В потоке 3 будет отображаться строка

Вся информация, передаваемая в качестве параметров в функцию потока для отображения

Родительский / основной поток ожидает завершения выполнения других потоков.

Final , все потоки будут прерваны.

NOTE

код компилируется с помощью следующей команды в терминале

gcc yield.c -lpthread

следующие результаты

pthread_create () для возвратов потока 1: 0

pthread_create () для возвратов потока 2: 0

pthread_create () для потока 3 возвращает: 0

XD-130201818 Идентификационный номер детали

Корзина 21, 3-й ряд

Магазин 61 на юг

выход недостаточен

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

void*print_message_function(void*ptr);

main()

  {

  pthread_t thread1,thread2;thread3;

  const char*message1="XD-130201818 Part ID";

  const char *message2 = "Bin 21 3rd row ";

  const char *message3 = "Store 61 south ";

  int  iret1, iret2,iret3;

  /* Create independent threads each of which will execute 
       function */

   iret1=pthread_create(&thread1,NULL,print_message_function,          
   (void*)message1);

   if(iret1)
   {
   fprintf(stderr,"Error - pthread_create() return code: %d\n",iret1);
   exit(EXIT_FAILURE);
   }

   printf("pthread_create() for thread 1 returns: %d\n",iret1);

   iret2 = pthread_create( &thread2, NULL, print_message_function,   

   (void*) message2);

   if(iret2)
   {
     fprintf(stderr,"Error - pthread_create() return code: %d\n",iret2);
     exit(EXIT_FAILURE);
   }

   iret3 = pthread_create( &thread1, NULL, print_message_function, (void*) 
   message3);

  if(iret3)
  {
  fprintf(stderr,"Error - pthread_create() return code: %d\n",iret3);
   exit(EXIT_FAILURE);
  }

  printf("pthread_create() for thread 1 returns: %d\n",iret1);

  printf("pthread_create() for thread 2 returns: %d\n",iret2);

  printf("pthread_create() for thread 3 returns: %d\n",iret3);

  /* Wait till threads are complete before main continues. Unless we  */

  /* wait we run the risk of executing an exit which will terminate   */

  /* the process and all threads before the threads have completed.   */


  pthread_join( thread1, NULL);

  pthread_join( thread2, NULL); 

  pthread_join( thread3, NULL);

 exit(EXIT_SUCCESS);

 }

 void *print_message_function( void *ptr )

{
 char *message;

 message = (char *) ptr;

 printf("%s \n", message);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...