1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

Don't leave and reenter guile mode if mutex is available

On Aug 5, 2009, at 10:06, Ken Raeburn wrote:
> (1) In scm_pthread_mutex_lock, we leave and re-enter guile mode so
> that we don't block the thread while in guile mode.  But we could
> use pthread_mutex_trylock first, and avoid the costs scm_leave_guile
> seems to incur on the Mac.  If we can't acquire the lock, it should
> return immediately, and then we can do the expensive, blocking
> version.  A quick, hack version of this changed my run time for
> A(3,8) from 17.5s to 14.5s, saving about 17%; sigaltstack and
> sigprocmask are still in the picture, because they're called from
> scm_catch_with_pre_unwind_handler.  I'll work up a nicer patch
> later.

Ah, we already had scm_i_pthread_mutex_trylock lying around; that made
things easy.
A second timing test with A(3,9) and this version of the patch (based
on 1.9.1) shows the same improvement.

* libguile/threads.c (scm_pthread_mutex_lock): Try the mutex before
  leaving and reentering guile mode.
This commit is contained in:
Ken Raeburn 2009-08-26 23:30:59 +01:00 committed by Neil Jerram
parent a66480374e
commit 71a5964c11

View file

@ -1826,10 +1826,15 @@ scm_std_select (int nfds,
int
scm_pthread_mutex_lock (scm_i_pthread_mutex_t *mutex)
{
if (scm_i_pthread_mutex_trylock (mutex) == 0)
return 0;
else
{
scm_t_guile_ticket t = scm_leave_guile ();
int res = scm_i_pthread_mutex_lock (mutex);
scm_enter_guile (t);
return res;
}
}
static void