linux-c库总结
1 sys_futex
- 基础介绍:Linux进程同步机制-Futex_linux futex-CSDN博客
- 升华:futex一般结合syscal使用,如(linux进阶40——futex_sys_futex-CSDN博客/进程上下文切换 – 残酷的性能杀手(上)-WinFrom控件库|.net开源控件库|HZHControls官网)
-
int futex(int* uaddr, int futex_op, int val, const struct timespec *timeout,
int *uaddr2, int val3)
{
return syscall(SYS_futex, uaddr, futex_op, val, timeout, uaddr2, val3);
} - op的类型包括():
- FUTEX_WAIT_PRIVATE: 当你确定futex变量仅用于同一进程内的线程之间的同步时使用
- FUTEX_WAIT: 当你需要在不同进程之间同步共享内存区域中的futex变量时使用(这种情况通常出现在使用共享内存(例如,通过mmap系统调用映射相同的物理内存到不同进程的地址空间)进行进程间通信时。在这种情况下,FUTEX_WAIT操作会影响所有访问该共享内存区域的进程)
- 引用:Matte-Java 的想法: 分析Futex_wait_private | FUTEX_WAIT_PRIVATE和FUTEX_WAIT的区别主要在于它们是否用于跨进程的同步。<br>使用FUTEX_WAIT_PRIVATE: 当你确定futex变量仅用于同一进程内的线程之间的同步时,应该使用FUTEX_WAIT_PRIVATE。这是因为FUTEX_WAIT_PRIVATE操作仅影响当前进程的线程,不会与其他进程共享futex状态。这通常会导致更好的性能,因为它减少了内核必须管理的全局等待队列的大小,并且减少了不同进程之间的同步开销。使用FUTEX_WAIT: 当你需要在不同进程之间同步共享内存区域中的futex变量时,应该使用FUTEX_WAIT。这种情况通常出现在使用共享内存(例如,通过mmap系统调用映射相同的物理内存到不同进程的地址空间)进行进程间通信时。在这种情况下,FUTEX_WAIT操作会影响所有访问该共享内存区域的进程。总结来说,如果你的futex变量只在当前进程的线程之间使用,那么应该使用FUTEX_WAIT_PRIVATE。如果你的futex变量在多个进程之间共享,那么应该使用FUTEX_WAIT。在大多数情况下,线程同步是在同一进程内进行的,因此FUTEX_WAIT_PRIVATE是更常见的选择。<br>【使用列子在图片附件中】 - 知乎 (zhihu.com)
-
- futex使用注意事项