libpod/lock/lock.go 接口层
    libpod/lock/file_lock_manager.go 文件锁的实现

    默认是shm锁:
    libpod/lock/shm

    二维数组,数组中每一个元素都是一个pthread_mutex_t,可以实现多进程锁。
    二维数组中,第一维的数量是根据lock数量计算的。第二维的数量是固定的,是uint32_t的长度,每一位表示对应的lock已经分配给某个container了。

    1. pthread_mutexattr_t ma;
    2. pthread_mutexattr_init(&ma);
    3. pthread_mutexattr_setpshared(&ma, PTHREAD_PROCESS_SHARED);
    4. pthread_mutexattr_setrobust(&ma, PTHREAD_MUTEX_ROBUST);
    5. pthread_mutex_init(&c->lock, &ma);

    但是在k8s中,在容器重启时,/dev/shm是不会清空的。
    https://github.com/kubernetes/kubernetes/issues/81001