[llvm-commits] [llvm] r73607 - /llvm/trunk/lib/System/Win32/RWMutex.inc

Howard Su howard0su at gmail.com
Wed Jun 17 02:22:23 PDT 2009


Maybe you can reference this:
http://www.codeguru.com/cpp/w-p/system/misc/article.php/c5679




On Wed, Jun 17, 2009 at 5:11 PM, Owen Anderson <resistor at mac.com> wrote:

> Author: resistor
> Date: Wed Jun 17 04:10:42 2009
> New Revision: 73607
>
> URL: http://llvm.org/viewvc/llvm-project?rev=73607&view=rev
> Log:
> Improve the Win32 reader-writer lock implementation by making it just a
> normal
> lock.  This is obviously bad, but at least it's threadsafe!  If you know
> how
> to improve this in a pre-Vista friendly well, patches welcome!
>
> Patch by Max Burke.
>
> Modified:
>    llvm/trunk/lib/System/Win32/RWMutex.inc
>
> Modified: llvm/trunk/lib/System/Win32/RWMutex.inc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/RWMutex.inc?rev=73607&r1=73606&r2=73607&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/lib/System/Win32/RWMutex.inc (original)
> +++ llvm/trunk/lib/System/Win32/RWMutex.inc Wed Jun 17 04:10:42 2009
> @@ -18,31 +18,39 @@
>
>  #include "Win32.h"
>
> -// FIXME: THIS IS NOT THREAD-SAFE!!
> -// Windows does not have reader-writer locks pre-Vista.  If you want to
> have
> -// thread-safe LLVM on Windows, for now at least, you need to use a
> pthreads
> -// replacement library.
> +// FIXME: Windows does not have reader-writer locks pre-Vista.  If you
> want
> +// real reader-writer locks, you a pthreads implementation for Windows.
>
>  namespace llvm {
>  using namespace sys;
>
> -RWMutex::RWMutex() { }
> +RWMutex::RWMutex() {
> +  data_ = calloc(1, sizeof(CRITICAL_SECTION));
> +  InitializeCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
> +}
>
> -RWMutex::~RWMutex() { }
> +RWMutex::~RWMutex() {
> +  DeleteCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
> +  free(data_);
> +}
>
>  bool RWMutex::reader_acquire() {
> +  EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
>   return true;
>  }
>
>  bool RWMutex::reader_release() {
> +  LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
>   return true;
>  }
>
>  bool RWMutex::writer_acquire() {
> +  EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
>   return true;
>  }
>
>  bool RWMutex::writer_release() {
> +  LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
>   return true;
>  }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
-Howard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20090617/e3a31d7e/attachment.html>


More information about the llvm-commits mailing list