File: thread_pool.rst

package info (click to toggle)
flint 3.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 68,996 kB
  • sloc: ansic: 915,350; asm: 14,605; python: 5,340; sh: 4,512; lisp: 2,621; makefile: 787; cpp: 341
file content (60 lines) | stat: -rw-r--r-- 2,169 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
.. _thread-pool:

**thread_pool.h** -- thread pool
===============================================================================


Thread pool
--------------------------------------------------------------------------------

.. type:: thread_pool_t

    This is a thread pool.

.. type:: thread_pool_handle

    This is a handle to a thread in a thread pool.

.. function:: void thread_pool_init(thread_pool_t T, slong size)

    Initialise ``T`` and create ``size`` sleeping
    threads that are available to work.
    If `size \le 0` no threads are created and future calls to
    :func:`thread_pool_request` will return `0` (unless
    :func:`thread_pool_set_size` has been called).

.. function:: slong thread_pool_get_size(thread_pool_t T)

    Return the number of threads in ``T``.

.. function:: int thread_pool_set_size(thread_pool_t T, slong new_size)

    If all threads in ``T`` are in the available state, resize ``T`` and return 1.
    Otherwise, return ``0``.

.. function:: slong thread_pool_request(thread_pool_t T, thread_pool_handle * out, slong requested)

    Put at most ``requested`` threads in the unavailable state and return
    their handles. The handles are written to ``out`` and the number of
    handles written is returned. These threads must be released by a call to
    ``thread_pool_give_back``.

.. function:: void thread_pool_wake(thread_pool_t T, thread_pool_handle i, int max_workers, void (*f)(void*), void * a)

    Wake up a sleeping thread ``i`` and have it work on ``f(a)``. The thread
    being woken will be allowed to start ``max_workers`` additional worker
    threads. Usually this value should be set to ``0``.

.. function:: void thread_pool_wait(thread_pool_t T, thread_pool_handle i)

    Wait for thread ``i`` to finish working and go back to sleep.

.. function:: void thread_pool_give_back(thread_pool_t T, thread_pool_handle i)

    Put thread ``i`` back in the available state. This thread should be sleeping
    when this function is called.

.. function:: void thread_pool_clear(thread_pool_t T)

    Release any resources used by ``T``. All threads should be given back before
    this function is called.