Next: thread.channel, Previous: term_to_xml, Up: Top [Contents]
%--------------------------------------------------% % vim: ft=mercury ts=4 sw=4 et %--------------------------------------------------% % Copyright (C) 2005, 2014 Mission Critical IT. % Copyright (C) 2014-2015, 2018, 2022 The Mercury team. % This file is distributed under the terms specified in COPYING.LIB. %--------------------------------------------------% % % File: thread.barrier.m % Original author: Peter Ross % Stability: low % % This module provides a barrier implementation. % % A barrier is a position in a program that any thread (of N threads) must % be suspended at until all the other threads (of N) reach the same % position. % % Barriers are represented by calls to barrier/3 (defined below). Different % code locations can belong to the same conceptual barrier using values of % type barrier. The same code location can also be used by multiple % barriers by supplying different values. % %--------------------------------------------------% %--------------------------------------------------% :- module thread.barrier. :- interface. :- import_module io. :- type barrier. % init(N, Barrier, !IO) % % Create a barrier for N threads. % :- pred init(int::in, barrier::out, io::di, io::uo) is det. % wait(Barrier, !IO) % % Indicate that the current thread has reached the barrier. Throws a % software_error/1 exception if this barrier has been used by more than % N threads. % :- pred wait(barrier::in, io::di, io::uo) is det. % release_barrier(Barrier, !IO) % % Release all the threads waiting at the barrier regardless of whether % or not N threads have arrived at the barrier. This can be called by % any thread, it does not have to be a thread that would normally call % wait/3. % :- pred release(barrier::in, io::di, io::uo) is det. %--------------------------------------------------% %--------------------------------------------------%