在某些示例中,我确实看到他们为此使用线程
但我只想用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)。要执行您想做的事情,您需要首先创建共享内存。了解有关shmgetshmat的信息。

请注意,如果使用线程而不是fork,则线程将共享相同的内存,然后代码将起作用。但是因为使用了fork,所以创建了一个新进程,该进程不再与父进程共享相同的内存。

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

10-08 21:33