Boost logo

Boost Users :

From: Herve Blanc (blanc_at_[hidden])
Date: 2002-07-30 11:44:53


bill_kempf wrote:

> --- In Boost-Users_at_y..., Herve Blanc <blanc_at_s...> wrote:
> > Is there anything available or coming in boost::thread to wrap STL
> containers
> > into thread safe containers?
>
> No.
>
> > If not, any advice for coding those wrappers efficiently/elegantly
> or not doing
> > that?
>
> Trying to do this is generally a bad idea. Using an internal mutex
> to protect the class will only allow you to synchronize at the method
> call level, and most user code will need synchronization around
> multiple such calls not a single call. Example:
>
> my_thread_safe_vector[0] += some_value;
> if (my_thread_safe_vector[0] > 100)
> my_thread_safe_vector[0] = 100;
>
> The above code is full of race conditions, even if
> my_thread_safe_vector uses a mutex internally.
>
> > If not again, why and how do you deal with the problem then?
>
> Use an external mutex to achieve the proper lock granularity.
> Example:
>
> boost::mutex::scoped_lock lock(my_mutex);
> my_vector[0] += some_value;
> if (my_vector[0] > 100)
> my_vector[0] = 100;
>
> There's no race in the above since the external mutex and lock insure
> the proper granularity for the three calls to the container methods.
>
> Bill Kempf
>
>
The "Multithreading and the C++ Type System" article by Andrei Alexandrescu
(available @
 http://www.informit.com/isapi/product_id~%7BE3967A89-4E20-425B-BCFF-B84B6DEED6CA%7D/content/index.asp
)
provides a generic solution to your scenarios as well... the kind of answer I
was looking for, am I missing something?

Herve.

--
Herve Blanc
phone: 1 408 586 6437
fax:   1 408 586 4675
mailto:blanc_at_[hidden]
NPTest, Inc.
150 Baytech Drive,
San Jose, CA 95134-2302, USA
http://www.slb.com/semiconductors/

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