--- /dev/null
+#include <omp.h>\r
+#include "00_pi_tools.h"\r
+#include "OmpTools.h"\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* Declaration *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |* Imported *|\r
+ \*-------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |* Public *|\r
+ \*-------------------------------------*/\r
+\r
+bool isPiOMPEntrelacerCritical_Ok(int n);\r
+\r
+/*--------------------------------------*\\r
+ |* Private *|\r
+ \*-------------------------------------*/\r
+\r
+static double piOMPEntrelacerCritical(int n);\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* Implementation *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |* Public *|\r
+ \*-------------------------------------*/\r
+\r
+bool isPiOMPEntrelacerCritical_Ok(int n)\r
+ {\r
+ return isAlgoPI_OK(piOMPEntrelacerCritical, n, "Pi OMP Entrelacer critical");\r
+ }\r
+\r
+/*--------------------------------------*\\r
+ |* Private *|\r
+ \*-------------------------------------*/\r
+\r
+double piOMPEntrelacerCritical(int n)\r
+ {\r
+ const int NB_THREAD = OmpTools::setAndGetNaturalGranularity();\r
+ const double DX = 1.0/(double)n;\r
+ double sum = 0;\r
+\r
+ #pragma omp parallel\r
+ {\r
+ double xs;\r
+ double sumLocalThread = 0;\r
+ const int TID = OmpTools::getTid();\r
+ int s = TID;\r
+\r
+ while (s < n)\r
+ {\r
+ xs = s * DX;\r
+ sumLocalThread += fpi(xs);\r
+ s += NB_THREAD;\r
+ }\r
+\r
+ #pragma omp critical(sum_fpi)\r
+ sum += sumLocalThread;\r
+\r
+ }\r
+\r
+ return sum * DX;\r
+ }\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* End *|\r
+ \*---------------------------------------------------------------------*/\r
+\r