The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/lib/libtpool/thread_pool_impl.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 
   22 /*
   23  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
   24  * Use is subject to license terms.
   25  */
   26 
   27 #ifndef _THREAD_POOL_IMPL_H
   28 #define _THREAD_POOL_IMPL_H
   29 
   30 #include <thread_pool.h>
   31 
   32 #ifdef  __cplusplus
   33 extern "C" {
   34 #endif
   35 
   36 /*
   37  * Thread pool implementation definitions.
   38  * See <thread_pool.h> for interface declarations.
   39  */
   40 
   41 /*
   42  * FIFO queued job
   43  */
   44 typedef struct tpool_job tpool_job_t;
   45 struct tpool_job {
   46         tpool_job_t     *tpj_next;              /* list of jobs */
   47         void            (*tpj_func)(void *);    /* function to call */
   48         void            *tpj_arg;               /* its argument */
   49 };
   50 
   51 /*
   52  * List of active threads, linked through their stacks.
   53  */
   54 typedef struct tpool_active tpool_active_t;
   55 struct tpool_active {
   56         tpool_active_t  *tpa_next;      /* list of active threads */
   57         pthread_t       tpa_tid;        /* active thread id */
   58 };
   59 
   60 /*
   61  * The thread pool.
   62  */
   63 struct tpool {
   64         tpool_t         *tp_forw;       /* circular list of all thread pools */
   65         tpool_t         *tp_back;
   66         pthread_mutex_t tp_mutex;       /* protects the pool data */
   67         pthread_cond_t  tp_busycv;      /* synchronization in tpool_dispatch */
   68         pthread_cond_t  tp_workcv;      /* synchronization with workers */
   69         pthread_cond_t  tp_waitcv;      /* synchronization in tpool_wait() */
   70         tpool_active_t  *tp_active;     /* threads performing work */
   71         tpool_job_t     *tp_head;       /* FIFO job queue */
   72         tpool_job_t     *tp_tail;
   73         pthread_attr_t  tp_attr;        /* attributes of the workers */
   74         int             tp_flags;       /* see below */
   75         uint_t          tp_linger;      /* seconds before idle workers exit */
   76         int             tp_njobs;       /* number of jobs in job queue */
   77         int             tp_minimum;     /* minimum number of worker threads */
   78         int             tp_maximum;     /* maximum number of worker threads */
   79         int             tp_current;     /* current number of worker threads */
   80         int             tp_idle;        /* number of idle workers */
   81 };
   82 
   83 /* tp_flags */
   84 #define TP_WAIT         0x01            /* waiting in tpool_wait() */
   85 #define TP_SUSPEND      0x02            /* pool is being suspended */
   86 #define TP_DESTROY      0x04            /* pool is being destroyed */
   87 #define TP_ABANDON      0x08            /* pool is abandoned (auto-destroy) */
   88 
   89 #ifdef  __cplusplus
   90 }
   91 #endif
   92 
   93 #endif /* _THREAD_POOL_IMPL_H */

Cache object: faf03f5cbe4dc8a03b6e5b87be52ea1b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.