在某些示例中,我确实看到他们为此使用线程
但我只想用fork和1个私有信号量来做
我想做这样简单的事情:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<semaphore.h>
int main() {
pid_t pid;
sem_t sema;
sem_init(&sema,1,0);
pid=fork();
if(pid==0) {
printf("first"); // want this first
sem_post(&sema);
}else{
sem_wait(&sema);
printf("second -_-");// and that second
}
return 0;
}
///////////////////////////////////
gcc pgm.c -pthread
./a.out
///////////////////////////////////
输出:
第一
//////////////////////////////////
那么这是什么问题呢?我想要它=>
第一秒 -_-
最佳答案
除非您在共享内存中创建了信号灯,否则您不会在进程之间共享该信号灯(即使您为pshared
传递了1)。要执行您想做的事情,您需要首先创建共享内存。了解有关shmget
和shmat
的信息。
请注意,如果使用线程而不是fork
,则线程将共享相同的内存,然后代码将起作用。但是因为使用了fork
,所以创建了一个新进程,该进程不再与父进程共享相同的内存。
关于c - C中的专用信号量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27281226/