multithreading - Reader/Writer Locks in C++

 

You Only Need To Note This: only 1 single thread can acquire an upgrade_lock at one time.

 

 

others are very straightforward.

96  vote

1800 INFORMATION is more or less correct, but there are a few issues I wanted to correct.

boost::shared_mutex _access;void reader(){

  boost::shared_lock< boost::shared_mutex > lock(_access);

  // do work here, without anyone having exclusive access

}



void conditional_writer(){

  boost::upgrade_lock< boost::shared_mutex > lock(_access);

  // do work here, without anyone having exclusive access



  if (something) {

    boost::upgrade_to_unique_lock< boost::shared_mutex > uniqueLock(lock);

    // do work here, but now you have exclusive access

  }



  // do more work here, without anyone having exclusive access

}



void unconditional_writer(){

  boost::unique_lock< boost::shared_mutex > lock(_access);

  // do work here, with exclusive access

}

 

Also Note, unlike a shared_lock, only a single thread can acquire an upgrade_lock at one time, even when it isn't upgraded (which I thought was awkward when I ran into it). So, if all your readers are conditional writers, you need to find another solution.

 
 
 
  

 

你可能感兴趣的:(reading)