Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #241 Yield priority to other threads

Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call the function busywork.

import "runtime"
runtime.Gosched()
busywork()
System.Threading
Thread.Yield();
busywork();
Thread.yield();
busywork();
uses Classes;
TThread.Yield;
busywork;
use Coro;
sub busywork { print 'busy' };

my $n = 12;

my $th_sub = sub {
    my ($limit) = @_;
    foreach ( 1 .. $limit ) {
       print '.';
       cede;
    }
};

my $th = Coro->new( $th_sub, $n );

$th->ready;

foreach my $ii ( 1 .. $n ) {
    if ( $ii == int $n * 2/3 ) {
        $Coro::current->prio(-1);
        cede;
        busywork();
    }
    print '-';
    cede;
}
::std::thread::yield_now();
busywork();

New implementation...
< >
programming-idioms.org