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

Subversion Repositories openrisc_me

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

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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