Logo

Programming-Idioms

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

Idiom #352 Parallelize 3 computations

Execute the functions f1, f2, f3 concurrently, and assign their respective return values to a1, a2, a3.

import "sync"
var wg sync.WaitGroup
wg.Add(3)
go func() {
	a1 = f1()
	wg.Done()
}()
go func() {
	a2 = f2()
	wg.Done()
}()
go func() {
	a3 = f3()
	wg.Done()
}()
wg.Wait()
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
List<Future<T>> a;
try (ExecutorService executorService = Executors.newFixedThreadPool(3)) {
    a = executorService.invokeAll(List.of(f1, f2, f3));
}

T a1 = a.get(0).get();
T a2 = a.get(1).get();
T a3 = a.get(2).get();
sysutils
  ThreadCount := 3;
  BeginThread(@f1,@a1);
  BeginThread(@f2,@a2);
  BeginThread(@f3,@a3);
  while ThreadCount > 0 do ;
def f1 = __method__
def f2 = __method__
def f3 = __method__

ractors = [Ractor.new{f1}, Ractor.new{f2}, Ractor.new{f3} ]
a1, a2, a3 = ractors.map(&:take)

New implementation...