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

📄 thread.h

📁 nandflash文件系统源代码
💻 H
字号:
/*! * $Id: thread.h 71 2008-07-07 15:49:14Z sriramsrao $  * * Copyright 2008 Quantcast Corp. * Copyright 2006-2008 Kosmix Corp. * * This file is part of Kosmos File System (KFS). * * Licensed under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * * \file thread.h * \brief thread control for KFS metadata server * \author Blake Lewis (Kosmix Corp.) */#if !defined(KFS_THREAD_H)#define KFS_THREAD_H#include <cassert>#include "common/config.h"extern "C" {#include <pthread.h>}namespace KFS {class MetaThread {	pthread_mutex_t mutex;	pthread_cond_t cv;	pthread_t thread;#if defined (__APPLE__)	bool threadInited;#else	static const pthread_t NO_THREAD = -1u;#endifpublic:	typedef void *(*thread_start_t)(void *);#if defined (__APPLE__)	MetaThread() : threadInited(false)	{		pthread_mutex_init(&mutex, NULL);		pthread_cond_init(&cv, NULL);	}#else	MetaThread(): thread(NO_THREAD)	{		pthread_mutex_init(&mutex, NULL);		pthread_cond_init(&cv, NULL);	}#endif	~MetaThread()	{		pthread_mutex_destroy(&mutex);#if defined (__APPLE__)		if (threadInited) {                	int UNUSED_ATTR status = pthread_cancel(thread);			assert(status == 0);		}#else                if (thread != NO_THREAD) {			int UNUSED_ATTR status = pthread_cancel(thread);			assert(status == 0);                }#endif		pthread_cond_destroy(&cv);	}	void lock()	{		int UNUSED_ATTR status = pthread_mutex_lock(&mutex);		assert(status == 0);	}	void unlock()	{		int UNUSED_ATTR status = pthread_mutex_unlock(&mutex);		assert(status == 0);       	}	void wakeup()	{		int UNUSED_ATTR status = pthread_cond_broadcast(&cv);		assert(status == 0);	}	void sleep()	{		int UNUSED_ATTR status = pthread_cond_wait(&cv, &mutex);		assert(status == 0);	}	void start(thread_start_t func, void *arg)	{		int UNUSED_ATTR status;		status = pthread_create(&thread, NULL, func, arg);		assert(status == 0);	}	void stop()	{		int UNUSED_ATTR status = pthread_cancel(thread);		assert(status == 0);	}	void exit(int status)	{		pthread_exit((void *) &status);	}	void join()	{		int UNUSED_ATTR status = pthread_join(thread, NULL);		assert(status == 0);	}	bool isEqual(pthread_t other)	{		return pthread_equal(thread, other);	}};}#endif // !defined(KFS_THREAD_H)

⌨️ 快捷键说明

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