⚲
Project
General
Profile
Sign in
Register
Home
Projects
Help
Search
:
Ruby master
All Projects
Ruby
»
Ruby master
Overview
Activity
Roadmap
Issues
Repository
Like
Download (1003 Bytes)
Bug #11040
» mutex_bug.rb
jvdp (Jaap van der Plas)
, 04/07/2015 11:37 AM
class
MyMonitor
attr_reader
:mon_owner
,
:mon_count
def
initialize
@mon_owner
=
nil
@mon_count
=
0
@mon_mutex
=
Mutex
.
new
end
def
mon_enter
if
@mon_owner
!=
Thread
.
current
@mon_mutex
.
lock
@mon_owner
=
Thread
.
current
end
@mon_count
+=
1
end
def
mon_exit
@mon_count
-=
1
if
@mon_count
==
0
@mon_owner
=
nil
@mon_mutex
.
unlock
end
end
def
stuff
mon_enter
print
mon_exit
end
end
monitor
=
MyMonitor
.
new
set_trace_func
proc
{
|
event
,
file
,
line
,
id
,
binding
,
classname
|
info
=
sprintf
(
"%s %8s %s:%-2d %10s %8s %s %d"
,
Thread
.
current
,
event
,
file
,
line
,
id
,
classname
,
monitor
.
mon_owner
,
monitor
.
mon_count
)
color
=
1
+
Thread
.
current
.
object_id
/
4
%
256
puts
"
\e
[38;5;
#{
color
}
m
#{
info
}
\e
[39m"
}
2
.
times
.
map
do
Thread
.
new
do
1_000
.
times
do
thread
=
Thread
.
new
do
monitor
.
stuff
sleep
end
monitor
.
stuff
thread
.
kill
thread
.
join
end
end
end
.
each
(
&
:join
)
« Previous
1
2
3
…
5
Next »
(1-1/5)
Loading...