是否可以有一组信号量?
is it possible to have an array of semaphores?
我正在研究哲学家就餐问题,我正在尝试创建一种方法来跟踪共享资源(叉子)。所以我的想法是创建一个信号量数组,这样当我不得不用叉子离开时,我可以通过使用数组中的索引来跟踪哲学家的编号和他吃饭的叉子,这个索引最好包含资源。
所以我的问题是,这可能吗?我尝试的一切都导致了错误,例如:
char ** sems[5];
sems[0] = struct sembuf a[1] = {{0, 1, 0}};
sems[1] = struct sembuf b[1]
sems[2] = struct sembuf c[1].... and so forth
但这显然是不正确的方法。有人可以帮我指出正确的方向吗?
.
是的,有可能,cf Arrays of semaphore and mutual assignment in C
linux中有两种信号量:SystemV和POSIX信号量(https://www.tutorialspoint.com/inter_process_communication/inter_process_communication_system_v_posix.htm)
SystemV (sem.h
)
内核内置信号量数组存在于使用 SysVinit 作为初始化系统 (SystemV) 的发行版中,参见 https://serverfault.com/questions/312982/what-are-the-semaphore-arrays-on-linux
有一个来自 SystemV (sem.h
) 的旧信号量库,其中存在一个函数 GETALL
将所有信号量写入数组
semctl(semid, 2, GETALL, outarray);
在 How semaphore operations are done for parent & child processes?
POSIX (semaphores.h
)
信号量在内核 (Ring 0) 中维护,它们存储在 /dev
文件系统中,参见 https://man7.org/linux/man-pages/man7/sem_overview.7.html and https://unix.stackexchange.com/questions/275650/where-is-a-named-semaphore-stored
您可以使用 sem_overview()
(命名信号量)和 shm_overview()
(未命名信号量)
获得所有信号量的概览
我正在研究哲学家就餐问题,我正在尝试创建一种方法来跟踪共享资源(叉子)。所以我的想法是创建一个信号量数组,这样当我不得不用叉子离开时,我可以通过使用数组中的索引来跟踪哲学家的编号和他吃饭的叉子,这个索引最好包含资源。
所以我的问题是,这可能吗?我尝试的一切都导致了错误,例如:
char ** sems[5];
sems[0] = struct sembuf a[1] = {{0, 1, 0}};
sems[1] = struct sembuf b[1]
sems[2] = struct sembuf c[1].... and so forth
但这显然是不正确的方法。有人可以帮我指出正确的方向吗? .
是的,有可能,cf Arrays of semaphore and mutual assignment in C
linux中有两种信号量:SystemV和POSIX信号量(https://www.tutorialspoint.com/inter_process_communication/inter_process_communication_system_v_posix.htm)
SystemV (sem.h
)
内核内置信号量数组存在于使用 SysVinit 作为初始化系统 (SystemV) 的发行版中,参见 https://serverfault.com/questions/312982/what-are-the-semaphore-arrays-on-linux
有一个来自 SystemV (sem.h
) 的旧信号量库,其中存在一个函数 GETALL
将所有信号量写入数组
semctl(semid, 2, GETALL, outarray);
在 How semaphore operations are done for parent & child processes?
POSIX (semaphores.h
)
信号量在内核 (Ring 0) 中维护,它们存储在 /dev
文件系统中,参见 https://man7.org/linux/man-pages/man7/sem_overview.7.html and https://unix.stackexchange.com/questions/275650/where-is-a-named-semaphore-stored
您可以使用 sem_overview()
(命名信号量)和 shm_overview()
(未命名信号量)