All,

(Note: I'm not critiquing the design choices, just trying to
understand the choices and the behavior of the implementation)

I read in the docs that simultaneous reads are ok, but simultaneous
read/write or write/write are not.  Ok, seems like a valid set up.

When I looked at the implementation, it looks like the reference
counter uses a mutex when BOOST_HAS_THREADS is defined.


Does that mean that if I have thread capability on my boost
installation (which I do), I pay for the mutex regardless of whether I
am actually using threads?


Secondly, if I'm paying for the cost of a mutex for the reference
count, why couldn't the shared_ptr also be protected by a mutex?
Thereby making the simultaneous read/write safe (safe in that no
memory would be leaked b/c the pointers written/read).


Which brings me to a third question.
Let's say I've got a class (e.g. shared_count) that I sometimes want
to be protected by a mutex, and sometimes not.  Say, for instance, I
want it to be protected by default, but sometimes I want to avoid that
overhead b/c I know I'll be using it in an environment that's already
protected by a mutex (and can avoid the extra mutex overhead).

Question: is the following design a reasonable one?
It appears to work for me.

template<class LockingStrategy>
class mySuperLockedClass : public LockingStrategy
{
public:
  void read() 
  {
    LockingStrategy::readlock();
    // do stuff
  }
  void write() 
  {
    LockingStrategy::writelock();
    // do stuff
  }
};

struct
EmptyLockingStrategy 
{
  void readlock() 
  {
    // Just a no-op
  }
  void writelock() 
  {
    // Just a no-op
  }
  
};

struct
MutexLockingStrategy 
{
  boost::mutex m_;
  void readlock() 
  {
    boost::mutex::scoped_lock l(m_);
  }
  void writelock() 
  {
    boost::mutex::scoped_lock l(m_);
  }
};

struct
ReaderWriterLockingStrategy 
{
  boost::unimplemented::rwmutex m_;
  void readlock() 
  {
    boost::unimplemented::rwmutex::scoped_read_lock l(m_);
  }
  void writelock() 
  {
    boost::unimplemented::rwmutex::scoped_write_lock l(m_);
  }
};




Just wondering if the above strategy could be used in the case of
shared_count, and if not, why not?

thanks,

TJ

-- 
Trey Jackson
[EMAIL PROTECTED]

"A life lived in fear is a life half lived."
-- No Fear
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to