2010/2/15 Caleb Clausen <vikkous / gmail.com>:
> On 2/15/10, Robert Klemme <shortcutter / googlemail.com> wrote:
>> 2010/2/15 Mido Peace <mido.peace / gmail.com>:
>>> =A0 =A0 @sem=3DSemaphore.new(0)
>>
>> IIRC semaphores are typically initialized with a positive value, i.e.
>> something larger than 0. =A0If you think about it, init with 0 does not
>> make too much sense.
>
> It depends on what you're using the semaphore for. If it's to be used
> for locking, you're right. If it's a signaling semaphore, then 0 for
> the init value is exactly what's needed.

Right you are.  Although I'd say that a condition variable is probably
a better tool for that.

> Mido, what do you want this for? Mutual exclusion? (But then why not
> just use a Mutex?) Signaling? Counting semaphore?
>
> You might consider using a (sigh) Queue or SizedQueue instead. Even
> tho it's kinda silly to use a Queue when all you're ever putting on or
> taking off the queue is instances of TrueClass.

Hm, in that case I'd prefer a semaphore.

> It used to be possible to fake signaling semaphore behavior by
> creating a Mutex then immediately locking it. That doesn't work
> anymore, tho; the thread that unlocks a Mutex now has to be the same
> one that locked it.

That is not needed.  Please see my test - I could not reproduce the
behavior reported.

Kind regards

robert


--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
IyEgcnVieTE5CgpyZXF1aXJlICd0aHJlYWQnCgpUaHJlYWQuYWJvcnRfb25fZXhjZXB0aW9uID0g
dHJ1ZQoKZGVmIGxvZyhtc2cpCiAgcHJpbnRmICIlLTMwcCAlc1xuIiwgVGhyZWFkLmN1cnJlbnQs
IG1zZwplbmQKCmNsYXNzIFNlbWFwaG9yZQogIGRlZiBpbml0aWFsaXplKHZhbCkKICAgIHJhaXNl
IEFyZ3VtZW50RXJyb3IsICJXcm9uZyB2YWx1ZSAlcCIgJSB2YWwgdW5sZXNzIHZhbCA+PSAwCiAg
ICBAdmFsID0gdmFsCiAgICBAbG9jayA9IE11dGV4Lm5ldwogICAgQHBvc2l0aXZlID0gQ29uZGl0
aW9uVmFyaWFibGUubmV3CiAgZW5kCgogIGRlZiBhY3F1aXJlCiAgICBAbG9jay5zeW5jaHJvbml6
ZSBkbwogICAgICB3aGlsZSBAdmFsID09IDAKICAgICAgICBAcG9zaXRpdmUud2FpdChAbG9jaykK
ICAgICAgZW5kCgogICAgICBAdmFsIC09IDEKICAgIGVuZAogIGVuZAoKICBkZWYgcmVsZWFzZQog
ICAgQGxvY2suc3luY2hyb25pemUgZG8KICAgICAgQHZhbCArPSAxCiAgICAgIEBwb3NpdGl2ZS5z
aWduYWwKICAgIGVuZAogIGVuZAoKICBkZWYgc3luY2hyb25pemUKICAgIGFjcXVpcmUKICAgIGJl
Z2luCiAgICAgIHlpZWxkCiAgICBlbnN1cmUKICAgICAgcmVsZWFzZQogICAgZW5kCiAgZW5kCmVu
ZAoKIyBsb2NraW5nCnB1dHMgPDxNU0cKCkxvY2tpbmcgdGVzdAoKTVNHCgpzZW0gPSBTZW1hcGhv
cmUubmV3IDIKCnRoID0gKDEuLjUpLm1hcCBkbwogIFRocmVhZC5uZXcgZG8KICAgIHRjID0gVGhy
ZWFkLmN1cnJlbnQKCiAgICAxMC50aW1lcyBkbwogICAgICBsb2cgInRyeSIKCiAgICAgIHNlbS5z
eW5jaHJvbml6ZSBkbwogICAgICAgIGxvZyAiZ290IgogICAgICBlbmQKCiAgICAgIGxvZyAicmVs
ZWFzZWQiCiAgICBlbmQKICBlbmQKZW5kCgp0aC5lYWNoIHt8dHwgdC5qb2luIH0KCgojIHNpZ25h
bGxpbmcKcHV0cyA8PE1TRwoKU2lnbmFsbGluZyB0ZXN0CgpNU0cKCnNlbSA9IFNlbWFwaG9yZS5u
ZXcgMAoKdGggPSBUaHJlYWQubmV3IGRvCiAgNS50aW1lcyBkbwogICAgc2VtLmFjcXVpcmUKICAg
IGxvZyAiZ290IGl0IgogIGVuZAplbmQKCjEwLnRpbWVzIGRvCiAgbG9nICJzaWduYWxsaW5nIgog
IHNlbS5yZWxlYXNlCmVuZAoKdGguam9pbgo=