use strict; use warnings; use threads; use threads::shared; # enable autoflush on the handle STDERR->autoflush; my $sem_stderr :shared; sub print_err { lock $sem_stderr; print STDERR @_; } sub task { my $id = shift; my $str = "ab " x 3000; for (1..10000) { print_err($str, "\n"); } } threads->create('task', $_) for 1..40; $_->join for threads->list; #### use strict; use warnings; use threads; use MCE::Shared; mce_open my $err_fh, '>>', \*STDERR; sub task { my $id = shift; my $str = "ab " x 3000; for (1..10000) { print $err_fh $str, "\n"; } } threads->create('task', $_) for 1..40; $_->join for threads->list; #### use strict; use warnings; use MCE::Hobo; use MCE::Shared; mce_open my $err_fh, '>>', \*STDERR; sub task { my $id = shift; my $str = "ab " x 3000; for (1..10000) { print $err_fh $str, "\n"; } } MCE::Hobo->create('task', $_) for 1..40; $_->join for MCE::Hobo->list; #### MD5 (output.txt) = b5bf2b49acd0926a9fa156def91579a0 400000 1200000000 3600400000 output.txt