This source file includes following definitions.
- pmix_mutex_construct
- pmix_mutex_destruct
- pmix_recursive_mutex_construct
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 #include "pmix_config.h"
26
27 #include "src/threads/mutex.h"
28
29 static void pmix_mutex_construct(pmix_mutex_t *m)
30 {
31 #if PMIX_ENABLE_DEBUG
32 pthread_mutexattr_t attr;
33 pthread_mutexattr_init(&attr);
34
35
36 #if PMIX_HAVE_PTHREAD_MUTEX_ERRORCHECK_NP
37 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK_NP);
38 #elif PMIX_HAVE_PTHREAD_MUTEX_ERRORCHECK
39 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
40 #endif
41
42 pthread_mutex_init(&m->m_lock_pthread, &attr);
43 pthread_mutexattr_destroy(&attr);
44
45 m->m_lock_debug = 0;
46 m->m_lock_file = NULL;
47 m->m_lock_line = 0;
48 #else
49
50
51 pthread_mutex_init(&m->m_lock_pthread, NULL);
52
53 #endif
54
55 #if PMIX_HAVE_ATOMIC_SPINLOCKS
56 pmix_atomic_lock_init( &m->m_lock_atomic, PMIX_ATOMIC_LOCK_UNLOCKED );
57 #endif
58 }
59
60 static void pmix_mutex_destruct(pmix_mutex_t *m)
61 {
62 pthread_mutex_destroy(&m->m_lock_pthread);
63 }
64
65 PMIX_CLASS_INSTANCE(pmix_mutex_t,
66 pmix_object_t,
67 pmix_mutex_construct,
68 pmix_mutex_destruct);
69
70 static void pmix_recursive_mutex_construct(pmix_recursive_mutex_t *m)
71 {
72 pthread_mutexattr_t attr;
73 pthread_mutexattr_init(&attr);
74
75 #if PMIX_ENABLE_DEBUG
76 m->m_lock_debug = 0;
77 m->m_lock_file = NULL;
78 m->m_lock_line = 0;
79 #endif
80
81 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
82
83 pthread_mutex_init(&m->m_lock_pthread, &attr);
84 pthread_mutexattr_destroy(&attr);
85
86 #if PMIX_HAVE_ATOMIC_SPINLOCKS
87 pmix_atomic_lock_init( &m->m_lock_atomic, PMIX_ATOMIC_LOCK_UNLOCKED );
88 #endif
89 }
90
91 PMIX_CLASS_INSTANCE(pmix_recursive_mutex_t,
92 pmix_object_t,
93 pmix_recursive_mutex_construct,
94 pmix_mutex_destruct);