4

在调查一些性能问题时,我最终进入了 gthread-posix.c。在那里我找到了如下代码:

static void __attribute__((noinline))
g_mutex_lock_slowpath (GMutex *mutex)
{
  /* Set to 2 to indicate contention.  If it was zero before then we
   * just acquired the lock.
   *
   * Otherwise, sleep for as long as the 2 remains...
   */
  while (exchange_acquire (&mutex->i[0], 2) != 0)
    syscall (__NR_futex, &mutex->i[0], (gsize) FUTEX_WAIT, (gsize) 2, NULL);
}

我很好奇为什么它在这里和其他地方不使用 FUTEX_WAIT_PRIVATE。至少在 ARM 上,非私有 futex 的速度要慢得多,而且我的印象是 glib 用于多线程而不是共享内存中的进程间通信。

4

1 回答 1

0

自 2015 年 3 月以来, GLib 现在确实使用了FUTEX_WAIT_PRIVATE。请参阅此提交相关的错误报告

于 2018-11-22T17:06:33.077 回答