Hi,

Robert Osfield wrote:
> Hi J.P,
> 
> If its hard to make a clean non recusive lock under Windows I'm
I have code that depends on the non-recursive behaviour, so I will try
out the pthreads_win32 implementation and see how it goes. The old OSG
code also works for me, I will have to dig in the archives to see why it
was replaced and will then try to see if the pthreads_win32 does any better.

> tempted to say make OpenThreads::Mutex support recursive calls on all
> platfroms, so simulate this under pthreads etc.  We already have a
This is one way to get to consistency, but ...

> ReentrantMutex in OpenThreads, the but I'd add to this is it does add
> complexity to the OpenThreads, and at a time when I really don't want
> to be changing any low down in the OSG as we are about to make 2.0.
I also think we should hold off low level changes to Linux code now.
Having Mutex and ReentrantMutex behave the same would make one of them
redundant though.

> 
> Since most of the threading works starts off under linux and then
> migrates to Windows we can say in general that out lock() don't
> usually need to be recursive as I'd have deadlocks under Linux in
> these instances - when these cases do exist the OSG already uses
> ReentrantMutex.   If we had threading code coming from Windows to
> other platforms this would be a greater issue.
Agree fully, don't fix the Linux code if it ain't broken.

jp
> 
> Robert.
> 
> Robert.
> 
> On 6/1/07, J.P. Delport <[EMAIL PROTECTED]> wrote:
>> Hi all,
>>
>> Paul, your implementation is certainly not wrong, it just differs from
>> the Linux behaviour.
>>
>> I have read up on the issue last night and, surprise, I was not the
>> first person to stumble upon this inconsistency.
>>
>> What follows is what I've found.
>>
>> On Windows, both win32 mutexes and critical sections are called
>> "recursive" and that allows one to lock the same mutex multiple times
>> from the same thread.
>>
>> Good info on the terminology can be found here:
>> http://www.boost.org/doc/html/thread/concepts.html
>> under locking strategies.
>>
>> From reading some of the boost lists it seems that making a
>> non-recursive mutex (like the normal pthread_mutex is) is quite hard on
>> Windows. Boost neatly sidetsteps the issue by making it the programmer's
>> problem:
>> "
>> In general a mutex object with an unspecified locking strategy is
>> unsafe, and it requires programmer discipline to use the mutex object
>> properly. However, this strategy allows an implementation to be as fast
>> as possible with no restrictions on its implementation. This is
>> especially true for portable implementations that wrap the native
>> threading support of a platform. For this reason, the classes
>> boost::mutex, boost::try_mutex and boost::timed_mutex use this locking
>> strategy despite the lack of safety.
>> "
>>
>> Boost uses critical sections on Windows and this is the same position we
>> are in now in terms of the differences between Linux and Windows. The
>> issue therefore is: Can we assume that all the code in OpenThreads/OSG
>> that relies on OpenThreads::Mutex adheres to this magical "programmer
>> discipline". It might, but I don't know how to even check. Were other
>> parts of code written with only non-recursive mutexes in mind?
>>
>> Alternatives for creating a non-recursive mutex on Windows are:
>> * InterLockedExchange and various ways of spinning (like the old
>> OpenThreads code). Seems hard to get right and sched delays are almost
>> unavoidable.
>>
>> * InterLockedExchange and an event. This looks quite neat and is used by
>> pthreads for win32 (see http://sourceware.org/pthreads-win32/)
>>
>> * more ... e.g. May 2007 article
>> http://www.ddj.com/dept/cpp/199203083
>> "Developing Lightweight, Statically Initializable C++ Mutexes"
>>
>> I hope I'm not kicking up a storm over nothing, but it just seems that a
>> mutex issue can cause all sorts of funnies with initialisation, shutdown
>> and multi-threading.
>>
>> regards
>> jp
>>
>>
>> Paul Martz wrote:
>> > Yep, the CRITICAL_SECTION code was my change. There were bugs
>> reported in
>> > the old code, and moving to CRITICAL_SECTION seemed like a wonderful
>> > simplification. I admit I didn't read the OpenThreads documentation,
>> so was
>> > not aware that a thread should block itself in this case.
>> CRITICAL_SECTION
>> > doesn't support that, as far as I know. It does block other threads
>> though.
>> >
>> > My apologies,
>> >    -Paul
>> >
>> >
>> >> -----Original Message-----
>> >> From: [EMAIL PROTECTED]
>> >> [mailto:[EMAIL PROTECTED] On Behalf Of
>> >> J.P. Delport
>> >> Sent: Thursday, May 31, 2007 3:16 AM
>> >> To: osg users
>> >> Subject: Re: [osg-users] OpenThreads::Mutex win32 vs pthread
>> >> inconsistencies
>> >>
>> >> Hi,
>> >>
>> >> Robert Osfield wrote:
>> >>> Hi J.P.
>> >>>
>> >>> Must admit I haven't used trylock in the OSG which is
>> >> possibly why we
>> >>> haven't hit upon this issue before.
>> >> The same actually happens with lock() on win32 with
>> >> USE_CRITICAL_SECTION. I just used trylock() in the example to
>> >> show the return value problem.
>> >>
>> >> current svn would happilly complete the following:
>> >>
>> >> for (int i=0;i<10;i++) {
>> >>      mymutex.lock();
>> >> }
>> >>
>> >> without any unlocks. I think it would only block if lock() is
>> >> actually called from a different thread, but this is still
>> >> not the pthread behaviour.
>> >>
>> >> jp

-- 
This message is subject to the CSIR's copyright, terms and conditions and
e-mail legal notice. Views expressed herein do not necessarily represent the
views of the CSIR.
 
CSIR E-mail Legal Notice
http://mail.csir.co.za/CSIR_eMail_Legal_Notice.html 
 
CSIR Copyright, Terms and Conditions
http://mail.csir.co.za/CSIR_Copyright.html 
 
For electronic copies of the CSIR Copyright, Terms and Conditions and the CSIR
Legal Notice send a blank message with REQUEST LEGAL in the subject line to
[EMAIL PROTECTED]


This message has been scanned for viruses and dangerous content by MailScanner, 
and is believed to be clean.  MailScanner thanks Transtec Computers for their 
support.

_______________________________________________
osg-users mailing list
osg-users@openscenegraph.net
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to