|
Boost Users : |
Subject: [Boost-users] [thread] Locking Problem (App Level)
From: U.Mutlu (for-gmane_at_[hidden])
Date: 2011-11-14 18:32:53
Hi,
in my current project I'm confronted with an IMO challenging
real-world problem, and am looking for an optimal or near-optimal
solution for it:
There is a standard vector (std::vector) of structs
(ie. data records), and 3 threads working on that vector:
thread 1: about every 10 seconds appends a new record
to the vector, or updates an existing record,
there are no deletions done.
thread 2: walks over all records in a read-only manner
and generates a list; it takes about 60 seconds.
thread 3: walks over all records in a read-only manner
and generates a different list; it takes about 90 seconds.
Of course all threads are running simultanously, but thread 2 fires
its job every 3 minutes, thread 3 every 5 minutes, and thread 1 is
permanently working (reacting on external events).
The problem is this: when thread 2 or 3 are running (remember 60 or 90 seconds)
then using the usual shared locking schemes thread 1 cannot do its job,
although it is the most important thread and its job is
time-critical (recording external events).
Is there a better locking solution to this problem?
(I think I need something like "record locking" instead if locking
the whole vector, isn't it?
But then one of course cannot spend a mutex for every of the 50+k records, isn't it?
How to do it else?)
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