当我们strace -c pid的时候,经常会发现futex占用大量时间,如下图:
那么, futex究竟是个什么东西呢?
futex – Fast Userspace Locking system call
一般来讲,futex是用于多线程程序中线程同步使用的; futex本身不是一个锁,但是可以利用这个机制实现锁。
传统的多线程同步是这样的(不保证说的对):
请求锁:
成功 –>干活 –> 干完 –> 发送信号给要加锁的线程
失败 –> 睡眠–> 收到信号–>继续请求锁
futex类似这样:
1 2 3 |
void waitUntilNotEqual(volatile int* addr, int value) { while (*addr == value) {} } |