#!/usr/bin/perl use v5.030; use threads; use threads::shared; use PDL; BEGIN { $PDL::no_clone_skip_warning = 1; } my $lock : shared = 0; PDL::srand(3); # PDL 2.087 for my $tid (1..16) { threads->create(sub { my $output = ""; for (1..1024) { my $r = random(); $output .= sprintf "%.72f\n", $r; } lock $lock; print $output; }); } $_->join for threads->list; #### $ ./pdl-rand.pl | sort >sort.16384.1 $ ./pdl-rand.pl | sort >sort.16384.2 $ ./pdl-rand.pl | sort >sort.16384.3 $ ./pdl-rand.pl | sort >sort.16384.4 $ sort -u sort.16384.1 |wc -l 16384 $ sort -u sort.16384.2 |wc -l 16383 $ sort -u sort.16384.3 |wc -l 16382 $ sort -u sort.16384.4 |wc -l 16383 $ diff -U 1 sort.16384.1 sort.16384.2 --- sort.16384.1 2024-06-08 09:45:09.466739327 +0200 +++ sort.16384.2 2024-06-08 09:50:24.203356598 +0200 @@ -12562,2 +12562,3 @@ 0.769879589153729004813442315935390070080757141113281250000000000000000000 +0.769879589153729004813442315935390070080757141113281250000000000000000000 0.769935005888716994526532744202995672821998596191406250000000000000000000 @@ -14417,3 +14418,2 @@ 0.881824935775787022151916971779428422451019287109375000000000000000000000 -0.881846738641755001353317311441060155630111694335937500000000000000000000 0.881880232378964956652112050505820661783218383789062500000000000000000000 $ diff -U 1 sort.16384.1 sort.16384.3 --- sort.16384.1 2024-06-08 09:45:09.466739327 +0200 +++ sort.16384.3 2024-06-08 09:52:32.837243809 +0200 @@ -13113,2 +13113,3 @@ 0.800507996510662955813586449949070811271667480468750000000000000000000000 +0.800507996510662955813586449949070811271667480468750000000000000000000000 0.800789660269827008320930872287135571241378784179687500000000000000000000 @@ -13686,3 +13687,2 @@ 0.836185190904191966154712645220570266246795654296875000000000000000000000 -0.836196817064046027390133986045839264988899230957031250000000000000000000 0.836451944200647945493187762622255831956863403320312500000000000000000000 @@ -14417,3 +14417,2 @@ 0.881824935775787022151916971779428422451019287109375000000000000000000000 -0.881846738641755001353317311441060155630111694335937500000000000000000000 0.881880232378964956652112050505820661783218383789062500000000000000000000 @@ -16095,2 +16094,3 @@ 0.983446838740376971799150851438753306865692138671875000000000000000000000 +0.983446838740376971799150851438753306865692138671875000000000000000000000 0.983723269438719016832806119055021554231643676757812500000000000000000000 $ diff -U 1 sort.16384.1 sort.16384.4|head -12 --- sort.16384.1 2024-06-08 09:45:09.466739327 +0200 +++ sort.16384.4 2024-06-08 09:58:27.630459409 +0200 @@ -1,154 +1,161 @@ -0.000079834519512877996963960691712003381326212547719478607177734375000000 +0.000027371707687184901000056191922027437612996436655521392822265625000000 +0.000055019674287226602333190222937631119748402852565050125122070312500000 0.000111351080303911996547544527302875394525472074747085571289062500000000 -0.000128298959913287011084040423192220714554423466324806213378906250000000 0.000214480856909560012703644393816659885487752035260200500488281250000000 -0.000326590586867237019173121348458721513452474027872085571289062500000000 0.000374558536247571020622731952087747231416869908571243286132812500000000 -0.000460649895690500976036529934276586573105305433273315429687500000000000 $ diff -U 0 sort.16384.1 sort.16384.4|grep -v '@@'|wc -l 19698