在调查一些性能问题时,我最终在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上,非私有futexes明显变慢,而且我认为glib是用于多线程而不是共享内存中的进程间通信。