Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
77c0bc37
Commit
77c0bc37
authored
Dec 15, 2013
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(Mutex): убрал паузу при блокировке mutex-а..
parent
55985b08
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
60 additions
and
85 deletions
+60
-85
SharedMemory.cc
extensions/SharedMemory/SharedMemory.cc
+0
-5
IOController.h
include/IOController.h
+0
-4
Mutex.h
include/Mutex.h
+8
-5
IOController.cc
src/Processes/IOController.cc
+16
-23
IONotifyController.cc
src/Processes/IONotifyController.cc
+7
-7
LT_Object.cc
src/Various/LT_Object.cc
+6
-15
Mutex.cc
src/Various/Mutex.cc
+21
-24
umutex.cc
tests/umutex.cc
+2
-2
No files found.
extensions/SharedMemory/SharedMemory.cc
View file @
77c0bc37
...
...
@@ -73,11 +73,6 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
string
t_field
=
conf
->
getArgParam
(
"--t-filter-field"
);
string
t_fvalue
=
conf
->
getArgParam
(
"--t-filter-value"
);
int
lock_msec
=
conf
->
getArgPInt
(
"--lock-rvalue-pause-msec"
,
5
);
if
(
lock_msec
<
0
)
lock_msec
=
0
;
setCheckLockValuePause
(
lock_msec
);
heartbeat_node
=
conf
->
getArgParam
(
"--heartbeat-node"
);
if
(
heartbeat_node
.
empty
()
)
dlog
[
Debug
::
WARN
]
<<
myname
<<
"(init): --heartbeat-node NULL ===> heartbeat NOT USED..."
<<
endl
;
...
...
include/IOController.h
View file @
77c0bc37
...
...
@@ -368,9 +368,6 @@ class IOController:
void
updateDepends
(
IOController
::
DependsList
&
lst
,
bool
undefined
,
bool
&
lock
);
void
updateBlockDepends
(
IOController
::
DependsList
&
lst
,
bool
blk_state
,
bool
&
lock
);
void
setCheckLockValuePause
(
int
msec
);
inline
int
getCheckLockValuePause
(){
return
checkLockValuePause
;
}
private
:
friend
class
AskDumper
;
...
...
@@ -387,7 +384,6 @@ class IOController:
DependsSlot
dslot
;
/*!< undefined depends slot */
DependsSlot
bslot
;
/*!< block depends slot */
int
checkLockValuePause
;
UniSetTypes
::
uniset_rwmutex
loggingMutex
;
/*!< logging info mutex */
};
...
...
include/Mutex.h
View file @
77c0bc37
...
...
@@ -100,11 +100,14 @@ namespace UniSetTypes
uniset_rwmutex
();
~
uniset_rwmutex
();
void
lock
(
int
check_pause_msec
=
1
);
void
lock
();
void
unlock
();
void
wrlock
(
int
check_pause_msec
=
1
);
void
rlock
(
int
check_pause_msec
=
1
);
void
wrlock
();
void
rlock
();
bool
tryrlock
();
bool
trywrlock
();
uniset_rwmutex
(
const
uniset_rwmutex
&
r
);
const
uniset_rwmutex
&
operator
=
(
const
uniset_rwmutex
&
r
);
...
...
@@ -123,7 +126,7 @@ namespace UniSetTypes
class
uniset_rwmutex_wrlock
{
public
:
uniset_rwmutex_wrlock
(
uniset_rwmutex
&
m
,
int
check_pause_msec
=
1
);
uniset_rwmutex_wrlock
(
uniset_rwmutex
&
m
);
~
uniset_rwmutex_wrlock
();
private
:
...
...
@@ -135,7 +138,7 @@ namespace UniSetTypes
class
uniset_rwmutex_rlock
{
public
:
uniset_rwmutex_rlock
(
uniset_rwmutex
&
m
,
int
check_pause_msec
=
5
);
uniset_rwmutex_rlock
(
uniset_rwmutex
&
m
);
~
uniset_rwmutex_rlock
();
private
:
...
...
src/Processes/IOController.cc
View file @
77c0bc37
...
...
@@ -44,8 +44,7 @@ IOController::IOController(const string name, const string section):
ObjectsManager
(
name
,
section
),
dioMutex
(
name
+
"_dioMutex"
),
aioMutex
(
name
+
"_aioMutex"
),
isPingDBServer
(
true
),
checkLockValuePause
(
5
)
isPingDBServer
(
true
)
{
}
...
...
@@ -53,8 +52,7 @@ IOController::IOController(ObjectId id):
ObjectsManager
(
id
),
dioMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_dioMutex"
),
aioMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_aioMutex"
),
isPingDBServer
(
true
),
checkLockValuePause
(
5
)
isPingDBServer
(
true
)
{
}
...
...
@@ -151,7 +149,7 @@ bool IOController::localGetState( IOController::DIOStateList::iterator& li,
if
(
li
->
second
.
undefined
)
throw
IOController_i
::
Undefined
();
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
return
li
->
second
.
state
;
}
...
...
@@ -176,7 +174,7 @@ long IOController::localGetValue( IOController::AIOStateList::iterator& li,
if
(
li
->
second
.
undefined
)
throw
IOController_i
::
Undefined
();
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
return
li
->
second
.
value
;
}
...
...
@@ -812,7 +810,7 @@ void IOController::dumpToDB()
// uniset_mutex_lock lock(dioMutex, 100);
for
(
DIOStateList
::
iterator
li
=
dioList
.
begin
();
li
!=
dioList
.
end
();
++
li
)
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
SensorMessage
sm
;
sm
.
id
=
li
->
second
.
si
.
id
;
sm
.
node
=
li
->
second
.
si
.
node
;
...
...
@@ -833,7 +831,7 @@ void IOController::dumpToDB()
// uniset_mutex_lock lock(aioMutex, 100);
for
(
AIOStateList
::
iterator
li
=
aioList
.
begin
();
li
!=
aioList
.
end
();
++
li
)
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
SensorMessage
sm
;
sm
.
id
=
li
->
second
.
si
.
id
;
sm
.
node
=
li
->
second
.
si
.
node
;
...
...
@@ -863,7 +861,7 @@ IOController_i::ASensorInfoSeq* IOController::getAnalogSensorsMap()
int
i
=
0
;
for
(
AIOStateList
::
iterator
it
=
aioList
.
begin
();
it
!=
aioList
.
end
();
++
it
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
]
=
it
->
second
;
i
++
;
}
...
...
@@ -884,7 +882,7 @@ IOController_i::DSensorInfoSeq* IOController::getDigitalSensorsMap()
int
i
=
0
;
for
(
DIOStateList
::
iterator
it
=
dioList
.
begin
();
it
!=
dioList
.
end
();
++
it
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
].
si
=
it
->
second
.
si
;
(
*
res
)[
i
].
type
=
it
->
second
.
type
;
(
*
res
)[
i
].
state
=
it
->
second
.
state
;
...
...
@@ -941,7 +939,7 @@ IOController_i::DigitalIOInfo IOController::getDInfo(const IOController_i::Senso
DIOStateList
::
iterator
it
=
dioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
!=
dioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
return
it
->
second
;
}
...
...
@@ -961,7 +959,7 @@ IOController_i::AnalogIOInfo IOController::getAInfo(const IOController_i::Sensor
AIOStateList
::
iterator
it
=
aioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
!=
aioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
return
it
->
second
;
}
...
...
@@ -1322,11 +1320,6 @@ void IOController::setBlockDependsSlot( DependsSlot sl )
bslot
=
sl
;
}
// -----------------------------------------------------------------------------
void
IOController
::
setCheckLockValuePause
(
int
msec
)
{
checkLockValuePause
=
msec
;
}
// -----------------------------------------------------------------------------
IOController_i
::
ASensorInfoSeq
*
IOController
::
getSensorSeq
(
const
IDSeq
&
lst
)
{
int
size
=
lst
.
length
();
...
...
@@ -1340,7 +1333,7 @@ IOController_i::ASensorInfoSeq* IOController::getSensorSeq( const IDSeq& lst )
DIOStateList
::
iterator
it
=
dioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
],
conf
->
getLocalNode
())
);
if
(
it
!=
dioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
].
si
=
it
->
second
.
si
;
(
*
res
)[
i
].
type
=
it
->
second
.
type
;
(
*
res
)[
i
].
real_value
=
it
->
second
.
real_state
?
1
:
0
;
...
...
@@ -1360,7 +1353,7 @@ IOController_i::ASensorInfoSeq* IOController::getSensorSeq( const IDSeq& lst )
AIOStateList
::
iterator
it
=
aioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
],
conf
->
getLocalNode
())
);
if
(
it
!=
aioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
]
=
it
->
second
;
continue
;
}
...
...
@@ -1421,7 +1414,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::
if
(
dit
!=
dioList
.
end
()
)
{
IOController_i
::
ShortIOInfo
i
;
uniset_rwmutex_rlock
lock
(
dit
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
dit
->
second
.
val_lock
);
i
.
value
=
dit
->
second
.
state
?
1
:
0
;
i
.
tv_sec
=
dit
->
second
.
tv_sec
;
i
.
tv_usec
=
dit
->
second
.
tv_usec
;
...
...
@@ -1432,7 +1425,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::
if
(
ait
!=
aioList
.
end
()
)
{
IOController_i
::
ShortIOInfo
i
;
uniset_rwmutex_rlock
lock
(
ait
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
ait
->
second
.
val_lock
);
i
.
value
=
ait
->
second
.
value
;
i
.
tv_sec
=
ait
->
second
.
tv_sec
;
i
.
tv_usec
=
ait
->
second
.
tv_usec
;
...
...
@@ -1459,7 +1452,7 @@ IOController_i::ShortMapSeq* IOController::getSensors()
{
IOController_i
::
ShortMap
m
;
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
m
.
id
=
it
->
second
.
si
.
id
;
m
.
value
=
it
->
second
.
value
;
m
.
type
=
it
->
second
.
type
;
...
...
@@ -1470,7 +1463,7 @@ IOController_i::ShortMapSeq* IOController::getSensors()
{
IOController_i
::
ShortMap
m
;
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
checkLockValuePause
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
m
.
id
=
it
->
second
.
si
.
id
;
m
.
value
=
it
->
second
.
state
?
1
:
0
;
m
.
type
=
it
->
second
.
type
;
...
...
src/Processes/IONotifyController.cc
View file @
77c0bc37
...
...
@@ -242,7 +242,7 @@ void IONotifyController::askState( const IOController_i::SensorInfo& si,
smsg
.
priority
=
(
Message
::
Priority
)
li
->
second
.
priority
;
smsg
.
supplier
=
getId
();
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
getCheckLockValuePause
()
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
smsg
.
state
=
li
->
second
.
state
;
smsg
.
value
=
li
->
second
.
state
?
1
:
0
;
smsg
.
undefined
=
li
->
second
.
undefined
;
...
...
@@ -324,7 +324,7 @@ void IONotifyController::askValue(const IOController_i::SensorInfo& si,
smsg
.
sm_tv_usec
=
li
->
second
.
tv_usec
;
smsg
.
ci
=
li
->
second
.
ci
;
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
getCheckLockValuePause
()
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
smsg
.
value
=
li
->
second
.
value
;
smsg
.
state
=
li
->
second
.
value
?
true
:
false
;
smsg
.
undefined
=
li
->
second
.
undefined
;
...
...
@@ -475,7 +475,7 @@ void IONotifyController::localSaveState( IOController::DIOStateList::iterator& i
// фильтрами или блокировками..
SensorMessage
sm
(
si
.
id
,
state
);
{
// lock
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
getCheckLockValuePause
()
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
if
(
prevState
==
it
->
second
.
state
)
return
;
...
...
@@ -539,7 +539,7 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
// фильтрами или блокировками..
SensorMessage
sm
(
si
.
id
,
li
->
second
.
value
);
{
// lock
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
getCheckLockValuePause
()
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
if
(
prevValue
==
li
->
second
.
value
)
return
;
...
...
@@ -975,7 +975,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
sm
.
priority
=
(
Message
::
Priority
)
li
->
second
.
priority
;
sm
.
ci
=
li
->
second
.
ci
;
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
getCheckLockValuePause
()
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
sm
.
value
=
li
->
second
.
value
;
sm
.
state
=
li
->
second
.
value
!=
0
?
true
:
false
;
sm
.
undefined
=
li
->
second
.
undefined
;
...
...
@@ -1191,7 +1191,7 @@ void IONotifyController::localSetState( IOController::DIOStateList::iterator& it
// Рассылаем уведомления только если значение изменилось...
SensorMessage
sm
(
si
.
id
,
state
);
{
// lock
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
,
getCheckLockValuePause
()
);
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
if
(
prevState
==
it
->
second
.
state
)
return
;
sm
.
id
=
si
.
id
;
...
...
@@ -1247,7 +1247,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li
// Рассылаем уведомления только если значение изменилось...
SensorMessage
sm
;
{
// lock
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
,
getCheckLockValuePause
()
);
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
if
(
prevValue
==
li
->
second
.
value
)
return
;
...
...
src/Various/LT_Object.cc
View file @
77c0bc37
...
...
@@ -33,6 +33,7 @@ using namespace UniSetTypes;
// -----------------------------------------------------------------------------
LT_Object
::
LT_Object
()
:
lstMutex
(
"LT_Object::lstMutex"
),
sleepTime
(
UniSetTimer
::
WaitUpTime
)
{
tmLast
.
setTiming
(
UniSetTimer
::
WaitUpTime
);
...
...
@@ -48,7 +49,7 @@ timeout_t LT_Object::checkTimers( UniSetObject* obj )
try
{
{
// lock
uniset_
mutex_lock
lock
(
lstMutex
,
5000
);
uniset_
rwmutex_rlock
lock
(
lstMutex
);
if
(
tlst
.
empty
()
)
{
...
...
@@ -70,7 +71,7 @@ timeout_t LT_Object::checkTimers( UniSetObject* obj )
}
{
// lock
uniset_
mutex_lock
lock
(
lstMutex
,
5000
);
uniset_
rwmutex_wrlock
lock
(
lstMutex
);
sleepTime
=
UniSetTimer
::
WaitUpTime
;
for
(
TimersList
::
iterator
li
=
tlst
.
begin
();
li
!=
tlst
.
end
();
++
li
)
{
...
...
@@ -130,10 +131,7 @@ timeout_t LT_Object::askTimer( UniSetTypes::TimerId timerid, timeout_t timeMS, c
}
{
// lock
if
(
unideb
.
debugging
(
Debug
::
INFO
)
&&
!
lstMutex
.
isRelease
()
)
unideb
[
Debug
::
INFO
]
<<
"(LT_askTimer): придется подождать освобождения lstMutex-а"
<<
endl
;
uniset_mutex_lock
lock
(
lstMutex
,
2000
);
uniset_rwmutex_wrlock
lock
(
lstMutex
);
// поищем а может уж такой есть
if
(
!
tlst
.
empty
()
)
{
...
...
@@ -166,20 +164,13 @@ timeout_t LT_Object::askTimer( UniSetTypes::TimerId timerid, timeout_t timeMS, c
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
"(LT_askTimer): поступил отказ по таймеру id="
<<
timerid
<<
endl
;
{
// lock
if
(
unideb
.
debugging
(
Debug
::
INFO
)
&&
!
lstMutex
.
isRelease
()
)
unideb
[
Debug
::
INFO
]
<<
"(LT_askTimer): придется подождать освобождения lstMutex-а
\n
"
;
uniset_mutex_lock
lock
(
lstMutex
,
2000
);
uniset_rwmutex_wrlock
lock
(
lstMutex
);
tlst
.
remove_if
(
Timer_eq
(
timerid
));
// STL - способ
}
// unlock
}
{
// lock
if
(
unideb
.
debugging
(
Debug
::
INFO
)
&&
!
lstMutex
.
isRelease
()
)
unideb
[
Debug
::
INFO
]
<<
"(LT_askTimer): придется подождать освобождения lstMutex-а
\n
"
;
uniset_mutex_lock
lock
(
lstMutex
,
2000
);
uniset_rwmutex_rlock
lock
(
lstMutex
);
if
(
tlst
.
empty
()
)
sleepTime
=
UniSetTimer
::
WaitUpTime
;
...
...
src/Various/Mutex.cc
View file @
77c0bc37
...
...
@@ -183,39 +183,26 @@ uniset_rwmutex::uniset_rwmutex( const uniset_rwmutex& r )
//unlock();
}
void
uniset_rwmutex
::
lock
(
int
check_pause_msec
)
void
uniset_rwmutex
::
lock
()
{
wr_wait
+=
1
;
while
(
!
m
.
tryWriteLock
()
)
{
if
(
check_pause_msec
>
0
)
msleep
(
check_pause_msec
);
}
m
.
writeLock
();
wr_wait
-=
1
;
MUTEX_DEBUG
(
cerr
<<
nm
<<
" Locked.."
<<
endl
;)
}
void
uniset_rwmutex
::
wrlock
(
int
check_pause_msec
)
void
uniset_rwmutex
::
wrlock
()
{
wr_wait
+=
1
;
while
(
!
m
.
tryWriteLock
()
)
{
if
(
check_pause_msec
>
0
)
msleep
(
check_pause_msec
);
}
m
.
writeLock
();
wr_wait
-=
1
;
MUTEX_DEBUG
(
cerr
<<
nm
<<
" WRLocked.."
<<
endl
;)
}
void
uniset_rwmutex
::
rlock
(
int
check_pause_msec
)
void
uniset_rwmutex
::
rlock
()
{
while
(
wr_wait
>
0
)
msleep
(
check_pause_msec
);
while
(
!
m
.
tryReadLock
()
)
{
if
(
check_pause_msec
>
0
)
msleep
(
check_pause_msec
);
}
msleep
(
2
);
m
.
readLock
();
MUTEX_DEBUG
(
cerr
<<
nm
<<
" RLocked.."
<<
endl
;)
}
...
...
@@ -224,11 +211,21 @@ void uniset_rwmutex::unlock()
m
.
unlock
();
MUTEX_DEBUG
(
cerr
<<
nm
<<
" Unlocked.."
<<
endl
;)
}
bool
uniset_rwmutex
::
tryrlock
()
{
return
m
.
tryReadLock
();
}
bool
uniset_rwmutex
::
trywrlock
()
{
return
m
.
tryWriteLock
();
}
// -------------------------------------------------------------------------------------------
uniset_rwmutex_wrlock
::
uniset_rwmutex_wrlock
(
uniset_rwmutex
&
_m
,
int
check_pause_msec
)
:
uniset_rwmutex_wrlock
::
uniset_rwmutex_wrlock
(
uniset_rwmutex
&
_m
)
:
m
(
_m
)
{
m
.
wrlock
(
check_pause_msec
);
m
.
wrlock
();
}
uniset_rwmutex_wrlock
::~
uniset_rwmutex_wrlock
()
...
...
@@ -250,10 +247,10 @@ uniset_rwmutex_wrlock& uniset_rwmutex_wrlock::operator=(const uniset_rwmutex_wrl
return
*
this
;
}
// -------------------------------------------------------------------------------------------
uniset_rwmutex_rlock
::
uniset_rwmutex_rlock
(
uniset_rwmutex
&
_m
,
int
check_pause_msec
)
:
uniset_rwmutex_rlock
::
uniset_rwmutex_rlock
(
uniset_rwmutex
&
_m
)
:
m
(
_m
)
{
m
.
rlock
(
check_pause_msec
);
m
.
rlock
();
}
uniset_rwmutex_rlock
::~
uniset_rwmutex_rlock
()
...
...
tests/umutex.cc
View file @
77c0bc37
...
...
@@ -89,7 +89,7 @@ class MyClassSpin
if
(
!
readLock
)
{
// cerr << nm << ": before RWlock.." << endl;
uniset_rwmutex_wrlock
l
(
m_spin
,
5
);
uniset_rwmutex_wrlock
l
(
m_spin
);
count
++
;
msleep
(
30
);
// cerr << nm << ": after RWlock.." << endl;
...
...
@@ -246,7 +246,7 @@ int main( int argc, const char **argv )
}
#endif
#if
0
#if
1
typedef
std
::
vector
<
MyClassSpin
*>
TSpinVec
;
TSpinVec
tsvec
(
max
);
for
(
int
i
=
0
;
i
<
max
;
i
++
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment