1 /* Copyright (C) 2004, 2007, 2008, 2009, 2010, 2011 2 Free Software Foundation, Inc. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program 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 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17 This file was written by Steve Munroe (sjmunroe@us.ibm.com). */ 18 19 /* Test break points and single step on thread functions. */ 20 21 #include <string.h> 22 #include <unistd.h> 23 #include <pthread.h> 24 #include <stdlib.h> 25 #include <stdio.h> 26 #include <errno.h> 27 28 #define N 2 29 30 static void * 31 tf (void *arg) 32 { 33 int n = (int) (long int) arg; 34 char number[160]; 35 int unslept = 10; 36 37 sprintf(number, "tf(%ld): begin", (long)arg); 38 puts (number); 39 40 while (unslept > 0) 41 unslept = sleep(unslept); 42 43 sprintf(number, "tf(%ld): end", (long)arg); 44 puts (number); 45 return NULL; 46 } 47 48 int main (int argc, char *argv[]) 49 { 50 int n; 51 int unslept = 2; 52 pthread_t th[N]; 53 54 for (n = 0; n < N; ++n) 55 if (pthread_create (&th[n], NULL, tf, (void *) (long int) n) != 0) 56 { 57 while (unslept > 0) 58 unslept = sleep(2); 59 puts ("create failed"); 60 exit (1); 61 } 62 63 puts("after create"); 64 65 for (n = 0; n < N; ++n) 66 if (pthread_join (th[n], NULL) != 0) 67 { 68 puts ("join failed"); 69 exit (1); 70 } 71 72 puts("after join"); 73 return 0; 74 } 75