// Tâche sporadique

// Le problème est que pour 1000 signaux envoyés, nous recevons dans la console moins de 10 signaux
// Pour éviter ce problème il faudrait pouvoir vérifier que chaque signal est bien reçu et traité en parallèle


#include <semaphore.h>
#include <pthread.h>
#include <iostream>
#include <unistd.h>
#include <signal.h>
using namespace std;

#define PROCESS 325000

int i;

void do_work(unsigned int duration);
void ecoute (int signo); // Signal handler

void do_work(unsigned int duration)
{
	for(i=0; i<duration*PROCESS; i++)
	{
		asm volatile (" NOP"); // Le compilateur effectue un travail
	}	
}

void ecoute (int signo)
{ 
	printf("SIGUSR1 a ete recu\n"); 
	do_work(2000); // Travail de 2 seconde 
	printf("Un travail est fini\n"); 
	
}

int main(void)
{
		
	signal(SIGUSR1, ecoute); // Le signal handler est associé au signal SIGUSR1
	
	int lepid;
	// Rafale de signaux
	for(i=0; i<1000; i++)
	{
		lepid = fork();
		kill(lepid,SIGUSR1);
	}
	
	return 0;
}