Boost logo

Boost Users :

Subject: Re: [Boost-users] [thread] Locking Problem (App Level)
From: Peter Dimov (pdimov_at_[hidden])
Date: 2011-11-14 19:54:38


U.Mutlu wrote:
> 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?

It depends. How long does it take to make a copy of the vector?

// thread 1
lock mutex;
update vector;
unlock mutex;

// thread 2
lock mutex;
make a copy of the vector;
unlock mutex;
walk over copy;

// thread 3: see thread 2


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