1 | /* |
2 | * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. |
3 | * All rights reserved. |
4 | * |
5 | * This source code is licensed under both the BSD-style license (found in the |
6 | * LICENSE file in the root directory of this source tree) and the GPLv2 (found |
7 | * in the COPYING file in the root directory of this source tree). |
8 | * You may select, at your option, one of the above-listed licenses. |
9 | */ |
10 | |
11 | #ifndef POOL_H |
12 | #define POOL_H |
13 | |
14 | #if defined (__cplusplus) |
15 | extern "C" { |
16 | #endif |
17 | |
18 | |
19 | #include <stddef.h> /* size_t */ |
20 | #define ZSTD_STATIC_LINKING_ONLY /* ZSTD_customMem */ |
21 | #include "zstd.h" |
22 | |
23 | typedef struct POOL_ctx_s POOL_ctx; |
24 | |
25 | /*! POOL_create() : |
26 | * Create a thread pool with at most `numThreads` threads. |
27 | * `numThreads` must be at least 1. |
28 | * The maximum number of queued jobs before blocking is `queueSize`. |
29 | * @return : POOL_ctx pointer on success, else NULL. |
30 | */ |
31 | POOL_ctx* POOL_create(size_t numThreads, size_t queueSize); |
32 | |
33 | POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customMem customMem); |
34 | |
35 | /*! POOL_free() : |
36 | Free a thread pool returned by POOL_create(). |
37 | */ |
38 | void POOL_free(POOL_ctx* ctx); |
39 | |
40 | /*! POOL_sizeof() : |
41 | return memory usage of pool returned by POOL_create(). |
42 | */ |
43 | size_t POOL_sizeof(POOL_ctx* ctx); |
44 | |
45 | /*! POOL_function : |
46 | The function type that can be added to a thread pool. |
47 | */ |
48 | typedef void (*POOL_function)(void*); |
49 | /*! POOL_add_function : |
50 | The function type for a generic thread pool add function. |
51 | */ |
52 | typedef void (*POOL_add_function)(void*, POOL_function, void*); |
53 | |
54 | /*! POOL_add() : |
55 | Add the job `function(opaque)` to the thread pool. `ctx` must be valid. |
56 | Possibly blocks until there is room in the queue. |
57 | Note : The function may be executed asynchronously, so `opaque` must live until the function has been completed. |
58 | */ |
59 | void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque); |
60 | |
61 | |
62 | /*! POOL_tryAdd() : |
63 | Add the job `function(opaque)` to the thread pool if a worker is available. |
64 | return immediately otherwise. |
65 | @return : 1 if successful, 0 if not. |
66 | */ |
67 | int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque); |
68 | |
69 | |
70 | #if defined (__cplusplus) |
71 | } |
72 | #endif |
73 | |
74 | #endif |
75 | |