История изменений
Исправление cudeta, (текущая версия) :
не могут быть потеряны
Полный бред, в ядре не существует никаких бесконечных очередей, поэтому они могут быть потеряны.
Этот код у меня выводит 15608, хотя, если они «не могут быть потеряны», то должно быть 100000.
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
static int n = 0;
static void sighandler(int signo)
{
(void) signo;
for (int i = 0; i < 100000; ++i) {
asm volatile ("" ::: "memory");
}
++n;
}
int main()
{
signal(SIGRTMIN, sighandler);
pid_t parent = getpid();
pid_t child = fork();
if (child < 0) {
perror("fork");
return 1;
} else if (child == 0) {
for (int i = 0; i < 100000; ++i) {
kill(parent, SIGRTMIN);
}
return 0;
} else {
waitpid(child, NULL, 0);
sleep(5);
printf("%d\n", n);
return 0;
}
}
Исходная версия cudeta, :
не могут быть потеряны
Полный бред, в ядре не существует никаких бесконечный очередей, поэтому они могут быть потеряны.
Этот код у меня выводит 15608, хотя, если они «не могут быть потеряны», то должно быть 100000.
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
static int n = 0;
static void sighandler(int signo)
{
(void) signo;
for (int i = 0; i < 100000; ++i) {
asm volatile ("" ::: "memory");
}
++n;
}
int main()
{
signal(SIGRTMIN, sighandler);
pid_t parent = getpid();
pid_t child = fork();
if (child < 0) {
perror("fork");
return 1;
} else if (child == 0) {
for (int i = 0; i < 100000; ++i) {
kill(parent, SIGRTMIN);
}
return 0;
} else {
waitpid(child, NULL, 0);
sleep(5);
printf("%d\n", n);
return 0;
}
}