diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-11-22 20:24:44 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-11-22 20:24:44 +0000 |
commit | 48e7d50e9f4e4d866e12383bd76a0e488eb14c54 (patch) | |
tree | f19dd9facaf8d0ad06290f19a199cc449393ffdd /libgo/runtime/go-note.c | |
parent | 2195c9beb6abfb06b7981643e2f3ea926ec0593b (diff) | |
download | gcc-48e7d50e9f4e4d866e12383bd76a0e488eb14c54.zip gcc-48e7d50e9f4e4d866e12383bd76a0e488eb14c54.tar.gz gcc-48e7d50e9f4e4d866e12383bd76a0e488eb14c54.tar.bz2 |
runtime: New lock/note implementation.
From-SVN: r181633
Diffstat (limited to 'libgo/runtime/go-note.c')
-rw-r--r-- | libgo/runtime/go-note.c | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/libgo/runtime/go-note.c b/libgo/runtime/go-note.c deleted file mode 100644 index 62c229f..0000000 --- a/libgo/runtime/go-note.c +++ /dev/null @@ -1,74 +0,0 @@ -/* go-note.c -- implement notesleep, notewakeup and noteclear. - - Copyright 2009 The Go Authors. All rights reserved. - Use of this source code is governed by a BSD-style - license that can be found in the LICENSE file. */ - -/* A note is a one-time notification. noteclear clears the note. - notesleep waits for a call to notewakeup. notewakeup wakes up - every thread waiting on the note. */ - -#include "go-assert.h" -#include "runtime.h" - -/* We use a single global lock and condition variable. It would be - better to use a futex on GNU/Linux. */ - -static pthread_mutex_t note_lock = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t note_cond = PTHREAD_COND_INITIALIZER; - -/* noteclear is called before any calls to notesleep or - notewakeup. */ - -void -runtime_noteclear (Note* n) -{ - int32 i; - - i = pthread_mutex_lock (¬e_lock); - __go_assert (i == 0); - - n->woken = 0; - - i = pthread_mutex_unlock (¬e_lock); - __go_assert (i == 0); -} - -/* Wait until notewakeup is called. */ - -void -runtime_notesleep (Note* n) -{ - int32 i; - - i = pthread_mutex_lock (¬e_lock); - __go_assert (i == 0); - - while (!n->woken) - { - i = pthread_cond_wait (¬e_cond, ¬e_lock); - __go_assert (i == 0); - } - - i = pthread_mutex_unlock (¬e_lock); - __go_assert (i == 0); -} - -/* Wake up every thread sleeping on the note. */ - -void -runtime_notewakeup (Note *n) -{ - int32 i; - - i = pthread_mutex_lock (¬e_lock); - __go_assert (i == 0); - - n->woken = 1; - - i = pthread_cond_broadcast (¬e_cond); - __go_assert (i == 0); - - i = pthread_mutex_unlock (¬e_lock); - __go_assert (i == 0); -} |