core :: union_find
union–find algorithm using an efficient disjoint-set data structureactors :: mandelbrot
Example implemented from "The computer Language Benchmarks Game" - Mandelbrotagent_simulation
by refining the Agent class to make
# Offers some POSIX threads services that are not available on all platforms
module extra is
cflags "-pthread"
ldflags "-pthread"
end
intrude import pthreads
in "C" `{
// TODO protect with: #ifdef WITH_LIBGC
#ifndef ANDROID
#define GC_THREADS
#include <gc.h>
#endif
`}
redef extern class NativePthread
fun cancel: Bool `{
return pthread_cancel(*self);
`}
end
redef class Thread
# Cancel the execution of the thread
fun cancel
do
if native == null then return
native.cancel
native = null
end
end
# Does not return if the running thread is to be cancelled
fun test_cancel `{ pthread_testcancel(); `}
private extern class NativePthreadBarrier in "C" `{ pthread_barrier_t * `}
new(count: Int) `{
pthread_barrier_t *barrier = malloc(sizeof(pthread_barrier_t));
int res = pthread_barrier_init(barrier, NULL, count);
return barrier;
`}
fun destroy `{ pthread_barrier_destroy(self); `}
fun wait `{ pthread_barrier_wait(self); `}
end
lib/pthreads/extra.nit:17,1--62,3