source: trunk/src/gcc/libjava/include/posix-threads.h@ 154

Last change on this file since 154 was 2, checked in by bird, 23 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 9.0 KB
RevLine 
[2]1// -*- c++ -*-
2// posix-threads.h - Defines for using POSIX threads.
3
4/* Copyright (C) 1998, 1999, 2001 Free Software Foundation
5
6 This file is part of libgcj.
7
8This software is copyrighted work licensed under the terms of the
9Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
10details. */
11
12#ifndef __JV_POSIX_THREADS__
13#define __JV_POSIX_THREADS__
14
15// NOTE: This file may only reference those pthread functions which
16// are known not to be overridden by the Boehm GC. If in doubt, scan
17// boehm-gc/gc.h. This is yucky but lets us avoid including gc.h
18// everywhere (which would be truly yucky).
19
20#include <pthread.h>
21#include <sched.h>
22
23//
24// Typedefs.
25//
26
27typedef struct _Jv_Thread_t
28{
29 // Flag values are defined in implementation.
30 int flags;
31
32 // Actual thread id.
33 pthread_t thread;
34
35 // Java Thread object.
36 java::lang::Thread *thread_obj;
37
38 // Condition variable and corresponding mutex, used to implement the
39 // interruptable wait/notify mechanism.
40 pthread_cond_t wait_cond;
41 pthread_mutex_t wait_mutex;
42
43 // Next thread for Condition Variable wait-list chain.
44 _Jv_Thread_t *next;
45
46} _Jv_Thread_t;
47
48typedef void _Jv_ThreadStartFunc (java::lang::Thread *);
49
50
51// Condition Variables used to implement wait/notify/sleep/interrupt.
52typedef struct
53{
54 // Linked list of Threads that are waiting to be notified.
55 _Jv_Thread_t *first;
56
57} _Jv_ConditionVariable_t;
58
59typedef struct
60{
61 // For compatibility, simplicity, and correctness, we do not use the native
62 // pthreads recursive mutex implementation, but simulate them instead.
63
64 // Mutex the thread holds the entire time this mutex is held.
65 pthread_mutex_t mutex;
66
67 // Thread holding this mutex.
68 pthread_t owner;
69
70 // Number of times mutex is held (lock depth). If 0, the lock is not held.
71 int count;
72} _Jv_Mutex_t;
73
74// This is a convenience function used only by the pthreads thread
75// implementation. This is slow, but that's too bad -- we need to do
76// the checks for correctness. It might be nice to be able to compile
77// this out. Returns 0 if the lock is held by the current thread, and
78// 1 otherwise.
79inline int
80_Jv_PthreadCheckMonitor (_Jv_Mutex_t *mu)
81{
82 pthread_t self = pthread_self();
83 if (mu->owner == self)