私の理解では、プロセスがクリティカルセクションに入ると、他のプロセスは同時に入ることができません。しかし、プログラムによって、そうではないことがわかります。
プロセス A を作成し、子プロセス B を作成します。子がクリティカル セクションに入り、寝ている間に、親もクリティカル セクションに入り、子が寝ていることに驚きました。それはどのように可能ですか?クリティカルセクションで同時に2つのプロセス?
enter code here
#include <semaphore.h>
#include <unistd.h>
#include <stdio.h>
sem_t sem;
int shared=0;
int pid;
void func()
{
sem_trywait(&sem);
if(pid==0)printf("Child entered\n");
else if(pid>0)printf("Parent entered\n");
sleep(2);
shared++;
sem_post(&sem);
if(pid==0)printf("Child exited\n");
else if(pid>0)printf("Parent exited\n");
}
int main()
{
pid=fork();
sem_init(&sem,1,0);
if(pid==0){
printf("In child\n");
func();
}
else {
func();
}
}
Output:
[root@dhcppc0 semaphore]# gcc semaphore1.c -lrt
[root@dhcppc0 semaphore]# ./a.out
In child
Child entered
Parent entered
<pause 2 secs>
Child exited
Parent exited