[#56982] [ruby-trunk - Bug #8854][Open] Update URL for bug reports — "stomar (Marcus Stollsteimer)" <redmine@...>
7 messages
2013/09/03
[#57038] [ruby-trunk - Feature #3620] Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones — "Glass_saga (Masaki Matsushita)" <glass.saga@...>
4 messages
2013/09/05
[#57040] Re: [ruby-trunk - Feature #3620] Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones
— SASADA Koichi <ko1@...>
2013/09/05
(2013/09/05 20:52), Glass_saga (Masaki Matsushita) wrote:
[#57058] [ruby-trunk - Bug #8875][Open] Select is not usable with SSLSocket — "headius (Charles Nutter)" <headius@...>
11 messages
2013/09/07
[#57092] [ruby-trunk - Bug #8883][Open] Rational canonicalization unexpectedly converts to Fixnum — "melquiades (Paul Cantrell)" <cantrell@...>
16 messages
2013/09/09
[#57111] [ruby-trunk - Feature #8887][Open] min(n), max(n), min_by(n), max_by(n) — "akr (Akira Tanaka)" <akr@...>
13 messages
2013/09/10
[#57117] [ruby-trunk - Feature #8890][Open] [PATCH] Eliminate less-than-zero checks for unsigned variables — "tonyo (Anton Ovchinnikov)" <revolver112@...>
5 messages
2013/09/10
[#57134] [CommonRuby - Feature #8896][Open] #tap with missing block — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>
5 messages
2013/09/11
[#57138] [ruby-trunk - Feature #8897][Open] client side TCP fast open — "Glass_saga (Masaki Matsushita)" <glass.saga@...>
5 messages
2013/09/11
[#57195] [ruby-trunk - Feature #8897][Assigned] client side TCP fast open
— "Glass_saga (Masaki Matsushita)" <glass.saga@...>
2013/09/14
[#57186] [ruby-trunk - Feature #8909][Open] Expand "f" frozen suffix to literal arrays and hashes — "headius (Charles Nutter)" <headius@...>
37 messages
2013/09/14
[#57224] [ruby-trunk - Feature #8909] Expand "f" frozen suffix to literal arrays and hashes
— "headius (Charles Nutter)" <headius@...>
2013/09/15
[#57262] [ruby-trunk - Feature #8921][Open] Allow select, reject, etc to accept a regex — "kyledecot (Kyle Decot)" <kyle.decot@...>
13 messages
2013/09/18
[#57264] [ruby-trunk - Feature #8921] Allow select, reject, etc to accept a regex
— "kyledecot (Kyle Decot)" <kyle.decot@...>
2013/09/18
[#57265] Re: [ruby-trunk - Feature #8921] Allow select, reject, etc to accept a regex
— Fuad Saud <fuadksd@...>
2013/09/18
Shouldn't select/reject use threequals?
[#57292] [ruby-trunk - Feature #8931][Open] Update URL in REPORTBUG_MSG — "zzak (Zachary Scott)" <e@...>
4 messages
2013/09/20
[#57315] [ruby-trunk - Feature #8938][Open] it keyword — "Sing9898 (Sing Lou)" <3b06e8d4@...>
5 messages
2013/09/23
[#57367] [ruby-trunk - Feature #8951][Open] Please add a hash-to-hash alternative of the map method to Hash — "behrangsa (Behrang Saeedzadeh)" <behrangsa@...>
8 messages
2013/09/25
[#57385] [ruby-trunk - Bug #8953][Open] `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal — "gfx (Goro Fuji)" <gfuji@...>
12 messages
2013/09/26
[#57394] [ruby-trunk - Bug #8955][Open] LocalJumpError - no block given (yield) after implementation of class hierarchy method cache invalidation — "mfla (Morten Fla)" <mmflaa@...>
4 messages
2013/09/26
[#57462] [ruby-trunk - misc #8962][Open] [DOC] add step to enable Generational GC merits in README.EXT* — "tad (Tadashi Saito)" <redmine@...>
6 messages
2013/09/28
[ruby-core:57442] [CommonRuby - Feature #8961] Synchronizable module to easily wrap methods in a mutex
From:
"headius (Charles Nutter)" <headius@...>
Date:
2013-09-27 11:40:54 UTC
List:
ruby-core #57442
Issue #8961 has been updated by headius (Charles Nutter).
I would like to see this in 2.1, as a standard Module method. The fact that "def" returns the method name now makes this really easy.
I think this would need to be implemented natively to work, however. The prototype above has a key flaw: there's no guarantee that only one Monitor will be created, so two threads could execute the same method at the same time, synchronizing against different monitors. Putting the synchronized wrapper into C code would prevent a potential context switch when first creating the Monitor instance (or it could simply use some other mechanism, such as normal Object monitor synchronization in JRuby).
This feature is similar to an extension in JRuby called JRuby::Synchronized that causes all method lookups to return synchronized equivalents.
Combined with https://bugs.ruby-lang.org/issues/8556 this could go a very long way toward giving Ruby users better tools to write thread-safe code.
----------------------------------------
Feature #8961: Synchronizable module to easily wrap methods in a mutex
https://bugs.ruby-lang.org/issues/8961#change-42047
Author: tobiassvn (Tobias Svensson)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
I propose a Synchronizable mixin to easily wrap methods in a mutex which works together with Ruby 2.1's method name symbols returned from 'def'.
The Mixin adds a new 'synchronized' class method which would alias the referenced method and redefines the original method wrapped in a 'synchronize do .. end' block.
This is probably somewhat related and an alternative to #8556.
--
Proof of concept (I've used Monitor here so potential users won't have to worry about reentrancy):
require 'monitor'
module Synchronizable
module ClassMethods
def synchronized(method)
aliased = :"#{method}_without_synchronization"
alias_method aliased, method
define_method method do |*args, &block|
monitor.synchronize do
__send__(aliased, *args, &block)
end
end
end
end
def monitor
@monitor ||= Monitor.new
end
def self.included(base)
base.extend(ClassMethods)
end
end
class Foo
include Synchronizable
synchronized def bar
# ...
end
end
--
http://bugs.ruby-lang.org/