gpt4 book ai didi

c - 如何使用semget实现sem_open

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:04 26 4
gpt4 key购买 nike

我想使用 System V 信号量实现一些 POSIX 信号量 API,并找到此博客 Implement POSIX Semaphore APIs using System V Semaphores APIs有用。

我使用 semget(System V) 来实现 sem_open(POSIX)。如下:

sem_t *sem_open(const char *name, int oflag, ...) {
creat(fname, 0444);
key_t key = ftok(name, 1);
semget(key, 1, IPC_CREAT)
}

但是semget 返回信号量集 标识符,而sem_open 返回一个新的POSIX 信号量。允许的信号量集的数量非常小,所以我不能创建很多信号量。我怎样才能摆脱它。

最佳答案

我假设您问的是如何增加系统限制。为此,您可以通过在 Linux 系统上运行以下命令来找到当前设置(或者 ipcs 也可以)

# cat /proc/sys/kernel/sem
250 32000 32 128

现在我们从手册页中查看上述输出中的以下四个值

SEMMSL

  • Maximum number of semaphores per semid: implementation dependent (on Linux, this limit can be read and modified via the first field of /proc/sys/kernel/sem).

SEMMNS

  • System wide maximum number of semaphores: policy dependent (on Linux, this limit can be read and modified via the second field of /proc/sys/kernel/sem). Values greater than SEMMSL * SEMMNI makes it
    irrelevant.

SEMOPM - maximum number of semaphore operations that can be performed per semop(2)

SEMMNI

  • System wide maximum number of semaphore sets: policy dependent (on Linux, this limit can be read and modified via the fourth field of
    /proc/sys/kernel/sem).

现在为了修改上述任何一个内核参数,您可以运行以下命令

# printf '250\t32000\t50\t150' >/proc/sys/kernel/sem

关于c - 如何使用semget实现sem_open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45951866/

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