Open Inventor Release 2024.2.0
 
Loading...
Searching...
No Matches
SbThreadSpinlock.h
1/*=======================================================================
2 *** THE CONTENT OF THIS WORK IS PROPRIETARY TO FEI S.A.S, (FEI S.A.S.), ***
3 *** AND IS DISTRIBUTED UNDER A LICENSE AGREEMENT. ***
4 *** ***
5 *** REPRODUCTION, DISCLOSURE, OR USE, IN WHOLE OR IN PART, OTHER THAN AS ***
6 *** SPECIFIED IN THE LICENSE ARE NOT TO BE UNDERTAKEN EXCEPT WITH PRIOR ***
7 *** WRITTEN AUTHORIZATION OF FEI S.A.S. ***
8 *** ***
9 *** RESTRICTED RIGHTS LEGEND ***
10 *** USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT OF THE CONTENT OF THIS ***
11 *** WORK OR RELATED DOCUMENTATION IS SUBJECT TO RESTRICTIONS AS SET FORTH IN ***
12 *** SUBPARAGRAPH (C)(1) OF THE COMMERCIAL COMPUTER SOFTWARE RESTRICTED RIGHT ***
13 *** CLAUSE AT FAR 52.227-19 OR SUBPARAGRAPH (C)(1)(II) OF THE RIGHTS IN ***
14 *** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 52.227-7013. ***
15 *** ***
16 *** COPYRIGHT (C) 1996-2014 BY FEI S.A.S, ***
17 *** BORDEAUX, FRANCE ***
18 *** ALL RIGHTS RESERVED ***
19**=======================================================================*/
20/*=======================================================================
21** Author : David Beilloin (Feb 2008)
22**=======================================================================*/
23
24#ifndef _SB_THREAD_SPINLOCK_H_
25#define _SB_THREAD_SPINLOCK_H_
26
27#include <Inventor/SbBase.h>
28#include <Inventor/threads/SbThread.h>
29#include <Inventor/threads/SbThreadMutex.h>
30
59{
60 public:
69
73 void lock() ;
74
78 void unlock() ;
79
80private:
81#if defined(_WIN32)
82 LONG volatile m_spinLock;
83 SbThreadId_t m_curThread;
84 int m_enterCount;
85#else
86 SbThreadMutex m_spinLock;
87#endif
88};
89
127 public:
133 {
134 m_spinlock = spinlock;
135 if ( m_spinlock )
136 m_spinlock->lock();
137 }
138
140 {
141 m_spinlock = &spinlock;
142 m_spinlock->lock();
143 }
144
145#ifndef HIDDEN_FROM_DOC
147 {
148 if ( m_spinlock )
149 m_spinlock->unlock();
150 }
151#endif // HIDDEN_FROM_DOC
152
153 private:
154 // Default constructor not accessible
156 :m_spinlock(NULL)
157 {}
158
159 // Copy constructor not accessible
161 :m_spinlock(NULL)
162 {}
163
164 SbThreadSpinlock *m_spinlock;
165};
166
167#endif // _SB_THREAD_SPINLOCK_H_
168
169
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Provides reliabl...
SbThreadAutoSpinlock(SbThreadSpinlock &spinlock)
SbThreadAutoSpinlock(SbThreadSpinlock *spinlock)
Creates a spinlock "autolock" object and automatically calls the mutex lock method.
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Portable mutex c...
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Portable spinloc...
SbThreadSpinlock()
Create a spinlock.
~SbThreadSpinlock()
Destructor.
void lock()
Request exclusive access for this spinlock.
void unlock()
Release exclusive access.