Boost logo

Boost Users :

Subject: Re: [Boost-users] [Thread]Deadlock using shared_mutex with unique_lock
From: Anthony Williams (anthony.ajw_at_[hidden])
Date: 2008-09-05 17:15:59


Stanislav Stoyanov <stystoyanov_at_[hidden]> writes:

> I am trying to use shared_mutex with unique_lock but my program blocks.
> I am using boost 1.35. My compiler is MSVC 8.0.50727.762 and my OS is
> Windows 2000.
> Here is a minimal code to reproduce the problem:

Your problem is here:

> for(int i=0; i<200; i++) {
> group.create_thread(boost::bind(&Executor::run, &ex));
> }

You've overrun the internal limits of boost::shared_mutex on Windows:
there can be no more than 127 threads waiting for an exclusive
lock. Unfortunately, the library doesn't detect this and corrupts the
mutex if the count overflows.

The equivalent limit for shared_locks is 2047.

If you reduce the upper limit of your loop to 128 then your code
should run fine.

I've created trac ticket #2293 to remind me to add the error checks.

Anthony

-- 
Anthony Williams            | Just Software Solutions Ltd
Custom Software Development | http://www.justsoftwaresolutions.co.uk
Registered in England, Company Number 5478976.
Registered Office: 15 Carrallack Mews, St Just, Cornwall, TR19 7UL

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net