OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [gdb/] [testsuite/] [gdb.threads/] [pthreads.c] - Blame information for rev 227

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 227 jeremybenn
/* Pthreads test program.
2
   Copyright 1996, 2002, 2003, 2004, 2007, 2008, 2009, 2010
3
   Free Software Foundation, Inc.
4
 
5
   Written by Fred Fish of Cygnus Support
6
   Contributed by Cygnus Support
7
 
8
   This file is part of GDB.
9
 
10
   This program is free software; you can redistribute it and/or modify
11
   it under the terms of the GNU General Public License as published by
12
   the Free Software Foundation; either version 3 of the License, or
13
   (at your option) any later version.
14
 
15
   This program is distributed in the hope that it will be useful,
16
   but WITHOUT ANY WARRANTY; without even the implied warranty of
17
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
   GNU General Public License for more details.
19
 
20
   You should have received a copy of the GNU General Public License
21
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
 
23
#include <stdio.h>
24
#include <stdlib.h>
25
#include <pthread.h>
26
 
27
/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
28
   is prototyped to be just a "pthread_attr_t", while under Solaris it
29
   is a "pthread_attr_t *".  Arg! */
30
 
31
#if defined (__osf__) || defined (__hpux__)
32
#define PTHREAD_CREATE_ARG2(arg) arg
33
#define PTHREAD_CREATE_NULL_ARG2 null_attr
34
static pthread_attr_t null_attr;
35
#else
36
#define PTHREAD_CREATE_ARG2(arg) &arg
37
#define PTHREAD_CREATE_NULL_ARG2 NULL
38
#endif
39
 
40
static int verbose = 0;
41
 
42
static void
43
common_routine (arg)
44
     int arg;
45
{
46
  static int from_thread1;
47
  static int from_thread2;
48
  static int from_main;
49
  static int hits;
50
  static int full_coverage;
51
 
52
  if (verbose) printf("common_routine (%d)\n", arg);
53
  hits++;
54
  switch (arg)
55
    {
56
    case 0:
57
      from_main++;
58
      break;
59
    case 1:
60
      from_thread1++;
61
      break;
62
    case 2:
63
      from_thread2++;
64
      break;
65
    }
66
  if (from_main && from_thread1 && from_thread2)
67
    full_coverage = 1;
68
}
69
 
70
static void *
71
thread1 (void *arg)
72
{
73
  int i;
74
  int z = 0;
75
 
76
  if (verbose) printf ("thread1 (%0x) ; pid = %d\n", arg, getpid ());
77
  for (i=1; i <= 10000000; i++)
78
    {
79
      if (verbose) printf("thread1 %d\n", pthread_self ());
80
      z += i;
81
      common_routine (1);
82
      sleep(1);
83
    }
84
  return (void *) 0;
85
}
86
 
87
static void *
88
thread2 (void * arg)
89
{
90
  int i;
91
  int k = 0;
92
 
93
  if (verbose) printf ("thread2 (%0x) ; pid = %d\n", arg, getpid ());
94
  for (i=1; i <= 10000000; i++)
95
    {
96
      if (verbose) printf("thread2 %d\n", pthread_self ());
97
      k += i;
98
      common_routine (2);
99
      sleep(1);
100
    }
101
  sleep(100);
102
  return (void *) 0;
103
}
104
 
105
void
106
foo (a, b, c)
107
     int a, b, c;
108
{
109
  int d, e, f;
110
 
111
  if (verbose) printf("a=%d\n", a);
112
}
113
 
114
main(argc, argv)
115
     int argc;
116
     char **argv;
117
{
118
  pthread_t tid1, tid2;
119
  int j;
120
  int t = 0;
121
  void (*xxx) ();
122
  pthread_attr_t attr;
123
 
124
  if (verbose) printf ("pid = %d\n", getpid());
125
 
126
  foo (1, 2, 3);
127
 
128
#ifndef __osf__
129
  if (pthread_attr_init (&attr))
130
    {
131
      perror ("pthread_attr_init 1");
132
      exit (1);
133
    }
134
#endif
135
 
136
#ifdef PTHREAD_SCOPE_SYSTEM
137
  if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM))
138
    {
139
      perror ("pthread_attr_setscope 1");
140
      exit (1);
141
    }
142
#endif
143
 
144
  if (pthread_create (&tid1, PTHREAD_CREATE_ARG2(attr), thread1, (void *) 0xfeedface))
145
    {
146
      perror ("pthread_create 1");
147
      exit (1);
148
    }
149
  if (verbose) printf ("Made thread %d\n", tid1);
150
  sleep (1);
151
 
152
  if (pthread_create (&tid2, PTHREAD_CREATE_NULL_ARG2, thread2, (void *) 0xdeadbeef))
153
    {
154
      perror ("pthread_create 2");
155
      exit (1);
156
    }
157
  if (verbose) printf("Made thread %d\n", tid2);
158
 
159
  sleep (1);
160
 
161
  for (j = 1; j <= 10000000; j++)
162
    {
163
      if (verbose) printf("top %d\n", pthread_self ());
164
      common_routine (0);
165
      sleep(1);
166
      t += j;
167
    }
168
 
169
  exit(0);
170
}
171
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.