]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/zstd/lib/common/pool.h
Update tcpdump to 4.9.2
[FreeBSD/FreeBSD.git] / sys / contrib / zstd / lib / common / pool.h
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 #include "zstd_internal.h"   /* ZSTD_customMem */
21
22 typedef struct POOL_ctx_s POOL_ctx;
23
24 /*! POOL_create() :
25  *  Create a thread pool with at most `numThreads` threads.
26  * `numThreads` must be at least 1.
27  *  The maximum number of queued jobs before blocking is `queueSize`.
28  * @return : POOL_ctx pointer on success, else NULL.
29 */
30 POOL_ctx *POOL_create(size_t numThreads, size_t queueSize);
31
32 POOL_ctx *POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customMem customMem);
33
34 /*! POOL_free() :
35     Free a thread pool returned by POOL_create().
36 */
37 void POOL_free(POOL_ctx *ctx);
38
39 /*! POOL_sizeof() :
40     return memory usage of pool returned by POOL_create().
41 */
42 size_t POOL_sizeof(POOL_ctx *ctx);
43
44 /*! POOL_function :
45     The function type that can be added to a thread pool.
46 */
47 typedef void (*POOL_function)(void *);
48 /*! POOL_add_function :
49     The function type for a generic thread pool add function.
50 */
51 typedef void (*POOL_add_function)(void *, POOL_function, void *);
52
53 /*! POOL_add() :
54     Add the job `function(opaque)` to the thread pool.
55     Possibly blocks until there is room in the queue.
56     Note : The function may be executed asynchronously, so `opaque` must live until the function has been completed.
57 */
58 void POOL_add(void *ctx, POOL_function function, void *opaque);
59
60
61 #if defined (__cplusplus)
62 }
63 #endif
64
65 #endif