Roger Leigh created XERCESC-2140:
------------------------------------

             Summary: Add MutexMgr for C++11 mutex implementation
                 Key: XERCESC-2140
                 URL: https://issues.apache.org/jira/browse/XERCESC-2140
             Project: Xerces-C++
          Issue Type: Improvement
          Components: Utilities
    Affects Versions: 3.2.1
            Reporter: Roger Leigh
            Assignee: Roger Leigh
         Attachments: 0001-StdMutexMgr-Add-C-11-mutex-manager.patch

Xalan currently supports two mutex managers: POSIX and Windows (and NoThreads, 
which doesn't really count).  With the advent of C++11, it's no longer 
necessary to use platform-specific threading facilities, since it's built 
directly into the standard library.  The attached patch adds a StdMutexMgr 
which uses a C++11 mutex, and will work on Unix or Windows systems with a 
sufficiently new compiler.  thread/mutex were implemented years ago, so all 
recent and not so recent systems should support it.  For those that don't, it 
will fall back to the POSIX/Windows managers and behave like before.

 

Options have been added to manually select the desired manager as for other 
options for both cmake and autoconf (standard/posix/windows/nothreads).  
Documented in more detail on the build page.

 

It's tested on Linux/MacOS X/Windows with a variety of manager combinations, 
and all looks fine so far.  Any testing/comments much appreciated.  It's a 
compatible addition, so could go into 3.2.2 if that's acceptable, otherwise 
could wait for later.

 

Looking at all of the manager implementations, one key defect (likely 
intentional design), is that there is zero exception safety.  No currently held 
mutex will be released if an exception gets thrown.  That could be prevented by 
moving to using C++11 threading entirely, and using std::lock_guard, which will 
automatically release locks on unwind.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscr...@xerces.apache.org
For additional commands, e-mail: c-dev-h...@xerces.apache.org

Reply via email to