FYI we just encountered a segfault in this area of the code:
https://issues.apache.org/jira/browse/MESOS-3056

On Thu, Jul 9, 2015 at 5:20 PM, Benjamin Hindman <[email protected]>
wrote:

> One more thing I'd like to point out here that MPark neglected because he's
> too humble: *the latest implementation of the synchronized macro enables us
> to use a return statement within the block without having to add the
> 'UNREACHABLE();' statement after the block!*
>
> I haven't seen it done in other projects that have a similar macros, very
> cool stuff MPark! Thank you!
>
>
> On Thu, Jul 9, 2015 at 5:02 PM Benjamin Mahler <[email protected]
> >
> wrote:
>
> > Thanks Michael, please do keep sending things like this out, and
> encourage
> > others to do so as well.
> >
> > Going to be increasingly important to let each other know about things
> like
> > this as the community grows. :)
> >
> > On Thu, Jul 9, 2015 at 4:37 PM, Marco Massenzio <[email protected]>
> > wrote:
> >
> > > sweet!
> > >
> > > *Marco Massenzio*
> > > *Distributed Systems Engineer*
> > >
> > > On Wed, Jul 8, 2015 at 12:40 PM, Michael Park <[email protected]>
> wrote:
> > >
> > > > Hello,
> > > >
> > > > This is an announcement about our *synchronized* macro available in
> > > > *<stout/synchronized.hpp>*. *synchronized* is essentially a syntactic
> > > sugar
> > > > to the *std::lock_guard* pattern that is reminiscent of Java's
> > > > *synchronized*.
> > > >
> > > > With *std::lock_guard*:
> > > >
> > > > *  std::mutex m;*
> > > > *  {*
> > > > *    std::lock_guard<std::mutex> lock(m);  **// Acquire.*
> > > > *    // Do something under the lock.*
> > > > *  }  **// Release.*
> > > >
> > > > With *synchronized*:
> > > >
> > > > *  std::mutex m;*
> > > > *  synchronized (m) {**  // Acquire.*
> > > > *    // Do something under the lock.*
> > > > *  }**  // Release.*
> > > >
> > > > *synchronized* is currently supported for
> > > >
> > > >    - Any *T* that has *T::lock()* and *T::unlock()* (practically
> these
> > > >    include *std::mutex, std::recursive_mutex*, etc)
> > > >    - *std::atomic_flag* (remember to initialize it to
> > *ATOMIC_FLAG_INIT*)
> > > >    - *pthread_mutex_t* (we'll be deprecating this as soon as
> possible)
> > > >
> > > > If you find that you need additional support for your lock type *T*,
> > you
> > > > can add it easily by adding a *synchronize* function. It should
> follow
> > > this
> > > > pattern:
> > > >
> > > > *  Synchronized<T> synchronize(T* t)*
> > > > *  {*
> > > > *    return Synchronized<T>(*
> > > > *        t,*
> > > > *        [](T *t) { /* lock 't'. */ },*
> > > > *        [](T *t) { /* unlock 't'. */ });*
> > > > *  }*
> > > >
> > > > Great example of this is available in
> > > > *3rdparty/libprocess/src/libevent_ssl_socket.hpp
> > > > *for customized locking of *libevent*'s *bufferevent*.
> > > >
> > > > *  Synchronized<bufferevent> synchronize(bufferevent* bev)*
> > > > *  {*
> > > > *    return Synchronized<bufferevent>(*
> > > > *        bev,*
> > > >  *       [](bufferevent* bev) { bufferevent_lock(bev); },*
> > > > *        [](bufferevent* bev) { bufferevent_unlock(bev); });*
> > > > *  }*
> > > >
> > > > We use this mechanism consistently throughout the codebase, and would
> > > like
> > > > it to be the standard pattern for locking critical sections.
> > > >
> > > > Thanks,
> > > >
> > > > MPark.
> > > >
> > >
> >
>

Reply via email to