gpt4 book ai didi

linux - Linux 上的 mlock() vs shmctl(SHM_LOCK)?

转载 作者:太空狗 更新时间:2023-10-29 11:20:04 26 4
gpt4 key购买 nike

在某些内存上调用 mlock() 和在同一内存上调用 shmctl(SHM_LOCK) 有什么区别?

这些是我可以确定的唯一区别:

  • mlock() 保证在返回时加载所有锁定的页面。 shmctl(SHM_LOCK) 防止交换,但不主动加载非常驻页面。
  • shmctl(SHM_LOCK) 只能用于共享内存段。
  • shmctl(SHM_LOCK) 在共享内存段的权限上设置一个额外的标志 (SHM_LOCKED)。

还有其他区别吗?特别是,有什么理由不在共享内存段上使用 mlock() 吗?

最佳答案

首先,mlock() 是将进程内存锁定在 RAM 中的系统调用,而 shmctl(X,SHM_LOCK,Y) 用于共享 (IPC) 内存,这需要所有生产者和消费者进行更多控制,所以,这就是为什么 mlock() 系统调用更容易的原因:

     int mlock(const void *addr, size_t len);

虽然 shmctl 操作起来要复杂得多,因为:

   int shmctl(int shmid, SHM_LOCK, struct shmid_ds *buf);

地点: buf 参数是一个指向 shmid_ds 结构的指针,定义如下:

       struct shmid_ds {
struct ipc_perm shm_perm; /* Ownership and permissions */
size_t shm_segsz; /* Size of segment (bytes) */
time_t shm_atime; /* Last attach time */
time_t shm_dtime; /* Last detach time */
time_t shm_ctime; /* Last change time */
pid_t shm_cpid; /* PID of creator */
pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */
shmatt_t shm_nattch; /* No. of current attaches */
...
};

关于linux - Linux 上的 mlock() vs shmctl(SHM_LOCK)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com