gpt4 book ai didi

c - posix信号量问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:02 25 4
gpt4 key购买 nike

我认为我的程序应该像这样工作:1) 用值 = 0 初始化未命名的信号量sem_init(..) 的第二个值是 1,所以正如 MAN 中所说,信号量在进程之间共享2)创建child,child等待信号量值变为1

父进程增加信号量的值所以子进程现在应该退出但它并没有真正退出,所以这就是问题所在

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>


pid_t child;


void child_proc(sem_t* sem) {
sem_wait(sem);
printf("OK\n");
}

void parent_proc(sem_t* sem) {

sem_post(sem);
sleep(2);

int status;
waitpid(child, &status, 0);
}

int main(int argc, char* argv[]) {
sem_t sem;
sem_init(&sem, 1, 0);

child = fork();

if (0 == child) {
child_proc(&sem);
return 0;
}

parent_proc(&sem);
return 0;
}

最佳答案

问题是两个进程都有信号量结构的本地(非共享)副本,并且一个进程中的更改不会反射(reflect)到另一个进程。

作为the man page also says ,如果要跨进程共享信号量,不仅需要给sem_init的第二个参数传递一个非零值,sem_t结构体也需要存在于共享内存区域。在您的示例程序中,它存在于堆栈中,不共享。

您可以通过使用公共(public)文件映射(使用 mmap)或使用 shm_open 共享内存,特别是。

关于c - posix信号量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16043592/

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