File: sidl_thread.h

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (45 lines) | stat: -rw-r--r-- 1,295 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 * sidl_thread.h -- generic thread & mutex stuff used in Babel
 * 
 */


/*
 * Recursive Mutex --  Allow the same thread to lock the mutex 
 * recursively, but require a matching number of unlocks
 * 
 * Note: this is not recommended by Lewis & Berg (Multithreaded
 * Programming w/ pthreads).  I tried using the implementation they
 * provide anyway, but the liscencing is not clear... so I wrote my own.
 */

#ifndef SIDL_THREAD_H
#define SIDL_THREAD_H

#include "babel_config.h"

#ifdef HAVE_PTHREAD
#include <pthread.h>

struct sidl_recursive_mutex_t {
  pthread_mutex_t lock;  /* lock for structure */
  pthread_cond_t  cv;    /* waiting list control */
  int             count; /* times locked recursively */
  pthread_t       owner; /* thread or NULL_TID */
};

#ifndef NULL_TID
#define NULL_TID (pthread_t) 0
#endif /* NULL_TID */

#define SIDL_RECURSIVE_MUTEX_INITIALIZER \
 {PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, NULL_TID}

int sidl_recursive_mutex_init( struct sidl_recursive_mutex_t* m );
int sidl_recursive_mutex_destroy( struct sidl_recursive_mutex_t * m );
int sidl_recursive_mutex_lock( struct sidl_recursive_mutex_t* m );
int sidl_recursive_mutex_unlock( struct sidl_recursive_mutex_t * m );

#endif /* HAVE_PTHREAD */

#endif /* defined (SIDL_THREAD_H) */