(root)/
glibc-2.38/
sysdeps/
pthread/
tst-basic1.c
       1  /* Copyright (C) 2002-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <pthread.h>
      19  #include <stdio.h>
      20  #include <unistd.h>
      21  #include <sys/types.h>
      22  
      23  
      24  static int do_test (void);
      25  
      26  #define TEST_FUNCTION do_test ()
      27  #include "../test-skeleton.c"
      28  
      29  static pid_t pid;
      30  
      31  static void *
      32  tf (void *a)
      33  {
      34    if (getpid () != pid)
      35      {
      36        write_message ("pid mismatch\n");
      37        _exit (1);
      38      }
      39  
      40    return a;
      41  }
      42  
      43  
      44  int
      45  do_test (void)
      46  {
      47    pid = getpid ();
      48  
      49  #define N 2
      50    pthread_t t[N];
      51    int i;
      52  
      53    for (i = 0; i < N; ++i)
      54      if (pthread_create (&t[i], NULL, tf, (void *) (long int) (i + 1)) != 0)
      55        {
      56  	write_message ("create failed\n");
      57  	_exit (1);
      58        }
      59      else
      60        printf ("created thread %d\n", i);
      61  
      62    for (i = 0; i < N; ++i)
      63      {
      64        void *r;
      65        int e;
      66        if ((e = pthread_join (t[i], &r)) != 0)
      67  	{
      68  	  printf ("join failed: %d\n", e);
      69  	  _exit (1);
      70  	}
      71        else if (r != (void *) (long int) (i + 1))
      72  	{
      73  	  write_message ("result wrong\n");
      74  	  _exit (1);
      75  	}
      76        else
      77  	printf ("joined thread %d\n", i);
      78      }
      79  
      80    return 0;
      81  }