semaphore,sem_init的问题
命名的semaphore基本会用,但是想在父子进程间用匿名的semaphore,用了这个sem_init,但是没起作用。估计是我没理解对这个东西。请懂的朋友赐教。
我是想父进程scanf等待输入的时候,子进程不会一直打印1,2; 而子进程打印1,2的过程中,父进程不会让你input。
- int main(int argc, char** argv){
- sem_t mutex;
- sem_init(&mutex, 1, 1);
- char buffer[100];
- pid_t pid;
- pid = fork();
- if(pid == 0){
- while(1){
- sem_wait(&mutex);
- printf("1\n");
- sleep(1);
- printf("2\n");
- sem_post(&mutex);
- }
- }
- else{
- while(1){
- sem_wait(&mutex);
- printf("input:");
- scanf("%s",buffer);
- sem_post(&mutex);
- }
- }
- }
复制代码运行的结果是,父子进程依然各干各的事,没有互相等待。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
sem_init的man page里有一段话,不知道与这个问题是否有关?
sem_init initializes the semaphore object pointed to by sem. The count
associated with the semaphore is set initially to value. The pshared
argument indicates whether the semaphore is local to the current pro-
cess ( pshared is zero) or is to be shared between several processes (
pshared is not zero). LinuxThreads currently does not support process-
shared semaphores, thus sem_init always returns with error ENOSYS if
pshared is not zero.
关注,来学习
这个你需要了解下fork时对POSIX unnamed semaphores.如果你的匿名信号量是在共享内存(比如匿名映射所创建的共享内存)中,那这个匿名信号量会被父子进程共享,否则的话子进程会拷贝一份匿名信号量。也就是说你的父子进程中所操作的根本不是同一个匿名信号量,所以你这样是不行的
shm_open共享内存我知道,那请问如果能把这个semaphore放在共享内存区呢?
我没试过,大概下面这意思吧
复制代码