bill_kempf wrote:
--- In Boost-Users@y..., Herve Blanc
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-B84B6DEE... ) 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@san-jose.tt.slb.com NPTest, Inc. 150 Baytech Drive, San Jose, CA 95134-2302, USA http://www.slb.com/semiconductors/