linux 线程挂起恢复
2015-04-16 13:03
507 查看
//============================================================================ // Name : thread.cpp // Author : LittleKu // Version : // Copyright : LittleKu // Description : thread in C++, Ansi-style //============================================================================ #include <pthread.h> #include <unistd.h> #include <stdio.h> using namespace std; class Thread { public: Thread() { this->_flag = 0; this->_threadID = 0; ::pthread_mutex_init(&this->_mutex, NULL); ::pthread_cond_init(&this->_cond, NULL); } virtual ~Thread() { ::pthread_mutex_destroy(&this->_mutex); ::pthread_cond_destroy(&this->_cond); } bool Start(bool bSuspend = false) { if (bSuspend) SuspendThread(); if (this->_threadID == 0) ::pthread_create(&this->_threadID, NULL, _ThreadFunc, this); return (this->_threadID != 0); } void SuspendThread() { if (this->_flag > 0) { printf("thread has been suspend\n"); return; } __sync_lock_test_and_set((long*) &this->_flag, 1); } void Resume() { if (this->_flag > 0) { __sync_lock_test_and_set((long*) &this->_flag, 0); ::pthread_mutex_lock(&this->_mutex); ::pthread_cond_broadcast(&this->_cond); ::pthread_mutex_unlock(&this->_mutex); } else printf("thread is running\n"); } virtual void OnRun() { while (this->_flag <= 0) { printf("thread running\n"); ::usleep(1000 * 1000); } } private: static void *_ThreadFunc(void *param) { Thread *pThis = (Thread*) param; while (true) { /**< suspend = true*/ if (pThis->_flag > 0) { printf("thread suspend\n"); ::pthread_mutex_lock(&pThis->_mutex); ::pthread_cond_wait(&pThis->_cond, &pThis->_mutex); ::pthread_mutex_unlock(&pThis->_mutex); } else { pThis->OnRun(); //pThis->SuspendThread(); } } return NULL; } private: pthread_t _threadID; int _flag; pthread_cond_t _cond; pthread_mutex_t _mutex; }; int main(int argc, char *argv[]) { char ch; Thread *t = new Thread; t->Start(true); while (1) { ::scanf("%c", &ch); switch (ch) { case 's': t->SuspendThread(); break; case 'r': t->Resume(); break; default: break; } } delete t; return 0; }
相关文章推荐
- Linux下线程的挂起和恢复 http://blog.chinaunix.net/uid-21765995-id-1815655.html
- Linux中线程的挂起与恢复(进程暂停)
- linux线程创建、挂起、恢复、退出
- Linux下线程的挂起和恢复
- linux中线程的挂起与恢复(进程暂停)(2013-06-19 13:42:58)
- linux中线程的挂起与恢复(进程暂停)
- Linux下线程的挂起和恢复
- linux 线程挂起恢复的简单示例
- linux线程的挂起与恢复
- linux中线程的挂起与恢复(进程暂停)
- linux 线程挂起恢复的简单示例
- linux中线程的挂起与恢复(进程暂停)
- Linux下线程的挂起和恢复
- Linux中对线程的挂起与恢复的实现
- linux进程的挂起和恢复
- Linux 3.15将减少挂起和恢复时间
- Android : 线程的结束,挂起和恢复
- android wait notify实现线程挂起与恢复
- Linux 进程的挂起和恢复
- java挂起、恢复和终止线程&线程间通信