|
Boost Users : |
Subject: [Boost-users] boost::mutex synchronization problem
From: Zachary Turner (divisortheory_at_[hidden])
Date: 2009-04-28 16:50:47
I've been trying to figure out if there's a simple way using condition
variables and mutexes to design a function with the following properties
(cliffs notes first, and then longer version in case it's not enough info):
1) there is a section of code in the function such that two threads cannot
enter that section at the same time.
2) after leaving the section of code, the thread should wait for something
to happen (signalled by another thread)
3) the waits in step 2 should be awoken in the order they occured.
Basically there are many threads that may want to post requests to
read/write from the network. So I have a bounded buffer implementation that
holds "work items", which can be of read requests or write requests. writes
return immediately, but reads block until the read is finished, which is
determined by when the actual network thread processes the work item and
signals something. read requests should be able to enter the queue
regardless of whether another read request is already pending, but obviously
the blocked threads should awake in the same order that items were inserted
into the queue.
I thought of making a condition variable for each read work item, and
storing it in the work item that goes in the queue, so the network thread
can notify that. But I feel like there should be a better way that doesn't
require potentially arbitrary numbers of condition variables.
Thanks
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