⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread.h

📁 OpenVPN -- A Secure tunneling daemon
💻 H
字号:
/* *  OpenVPN -- An application to securely tunnel IP networks *             over a single UDP port, with support for SSL/TLS-based *             session authentication and key exchange, *             packet encryption, packet authentication, and *             packet compression. * *  Copyright (C) 2002-2003 James Yonan <jim@yonan.net> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program (see the file COPYING included with this *  distribution); if not, write to the Free Software Foundation, Inc., *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ifndef THREAD_H#define THREAD_H#include "basic.h"#include "common.h"/* * OpenVPN static mutex locks, by mutex type */#define L_MSG       0#define L_TLS       1#define L_SOCK      2#define L_INET_NTOA 3#define L_CTIME     4#define L_STRERR    5#define N_MUTEXES   6#ifdef USE_PTHREADextern pthread_t x_main_thread_id;extern pthread_t x_work_thread_id;extern pthread_mutex_t x_lock_cs[N_MUTEXES];extern bool x_lock_cs_init;#define MAIN_THREAD 0#define WORK_THREAD 1#define N_THREADS   2#define MUTEX_DEFINE_STATIC(lock)  static pthread_mutex_t lock#define MUTEX_DEFINE(lock)         pthread_mutex_t lock#define MUTEX_INIT(lock)           pthread_mutex_init(&lock, NULL)#define MUTEX_DESTROY(lock)        pthread_mutex_destroy(&lock)#define MUTEX_LOCK(lock)           pthread_mutex_lock (&lock)#define MUTEX_UNLOCK(lock)         pthread_mutex_unlock (&lock)static inline intthread_number(void){  return (!x_main_thread_id || pthread_self () == x_main_thread_id) ? MAIN_THREAD : WORK_THREAD;}static inline voidmutex_lock (int type){  if (x_lock_cs_init)    {      pthread_mutex_lock (&(x_lock_cs[type]));    }}static inline voidmutex_unlock (int type){  if (x_lock_cs_init)    {      pthread_mutex_unlock (&(x_lock_cs[type]));#if 0      /* DEBUGGING -- if race conditions exist, make them more likely to occur */      {	if (thread_number() == WORK_THREAD)	  sleep (0);      }#endif    }}static inline voidmutex_cycle (int type){  if (x_lock_cs_init)    {      pthread_mutex_unlock (&(x_lock_cs[type]));      sleep (0);      pthread_mutex_lock (&(x_lock_cs[type]));    }}void thread_init(void);void thread_cleanup(void);void work_thread_create (void *(*start_routine) (void *), void* arg);void work_thread_join (void);#else /* USE_PTHREAD */#define N_THREADS 1#define MUTEX_DEFINE_STATIC(lock)#define MUTEX_DEFINE(lock)#define MUTEX_INIT(lock)#define MUTEX_DESTROY(lock)#define MUTEX_LOCK(lock)#define MUTEX_UNLOCK(lock)static inline voidthread_init(void){}static inline voidthread_cleanup(void){}static inline intthread_number(void){  return 0;}static inline voidwork_thread_create (void *(*start_routine) (void *), void* arg){}static inline voidwork_thread_join (void){}static inline voidmutex_lock (int type){}static inline voidmutex_unlock (int type){}static inline voidmutex_cycle (int type){}#endif /* USE_PTHREAD */#endif /* THREAD_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -