pthreads - 

POSIX Threads support

The threads can be manipulated and synchronized using the classes Thread, Mutex and Barrier.

This group also provides two optional modules with thread-safe collections:

  • redef_collections redefines existing collection to make them thread-safe. This incures a small overhead in all usage of the redefined collections.
  • concurrent_collections intro new thread-safe collections.

Theses services are implemented using the POSIX threads.

You can also use the is threaded annotation on methods, which makes them run on their own thread. Methods with self calls are not supported.

A method or function annotated with is threaded has its return value changed during compilation. You will get a subclass of Thread, even if there wasn't a return value before. You can know if the threaded method is done with the is_done boolean from Thread. A call to the join method will block the execution until the threaded method is done, or immediatly return if it's already done. join will return an object typed with the orginial return type, or null if there wasn't.

Known limitations:

  • Most services from the Nit library are not thread-safe. You must manage your own mutex to avoid conflicts on shared data.
  • FFI's global references are not thread-safe.

For more information:

  • See: man pthreads
  • See: examples/concurrent_array_and_barrier.nit
  • See: ̀ examples/threaded_example.nit`