Boost logo

Boost Users :

From: Khandelwal, Amit (amit.khandelwal_at_[hidden])
Date: 2008-07-11 09:31:45


Hmm...I don't know why you say that there will be a race condition. Let
say 2 threads are calling pop on the queue and another thread is calling
front(). Let us call these 3 thread p1, p2 (for pop) and f1 for front.

As per my understanding - this could be one possible scenario.

P1 -- acquire the lock
P2 -- blocked on the lock
F1 -- blocked on the lock

P1 -- done and waiting on the lock
P2 -- still blocking
F1 -- acquired the lock

So where is the race condition ?

 

-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]] On Behalf Of Anthony
Williams
Sent: Friday, July 11, 2008 9:14 AM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] [Thread] What do I #include?

"Khandelwal, Amit" <amit.khandelwal_at_[hidden]> writes:

> The way I use mutex is to protect one shared resource. Here is sample
> code that I cooked up. I am not sure why you want to use a single
> mutex to protect multiple resources. However, if your use case demands

> it than wrap those resources in a class and have a mutex as a member
> variable of that class.

> template <typename T, typename SEQUENCE = std::deque<T> > class
> tsqueue {
>
> const T& front() {
> boost::lock_guard<boost::mutex> lock(mutex);
> std::cout << "Pop element: " << m_queue.front() <<
> std::endl;
> return m_queue.front();
> }
>
> void pop() {
> boost::lock_guard<boost::mutex> lock(mutex);
> return m_queue.pop();
> }

This code is not thread safe unless there is only one consumer. Though
each operation is safe, the front()/pop() model gives you a race
condition: some other thread may steal your element between the call to
front() and pop().

See
http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-s
afe-queue-using-condition-variables.html
for a description of a thread-safe queue that uses a condition variable
to provide waiting and allows multiple consumers.

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 mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
This message is intended only for the personal and confidential use of the designated recipient(s) named above.  If you are not the intended recipient of this message you are hereby notified that any review, dissemination, distribution or copying of this message is strictly prohibited.  This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Lehman Brothers.  Email transmission cannot be guaranteed to be secure or error-free.  Therefore, we do not represent that this information is complete or accurate and it should not be relied upon as such.  All information is subject to change without notice.
--------
IRS Circular 230 Disclosure:
Please be advised that any discussion of U.S. tax matters contained within this communication (including any attachments) is not intended or written to be used and cannot be used for the purpose of (i) avoiding U.S. tax related penalties or (ii) promoting, marketing or recommending to another party any transaction or matter addressed herein.

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