まず、mlock()はRAM内のプロセスメモリをロックするためのシステムコールであり、shmctl(X、SHM_LOCK、Y)は共有(IPC)メモリを実行するために使用されます。これには、すべてのプロデューサーとコンシューマーからのより多くの制御が必要です。そのため、mlock()syscallは次のようにはるかに簡単です。
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 */
...
};