POSIX的Linux操作系统没有提供线程挂起和恢复的例程,在网上找了找,看到一个老外写的程序,感觉想法不错,放在这里大家分享一下。理论上应该可以实现,不过我没有试,给大家提供一个参考。 (在读取缓存里的数据时,当缓存中没有数据最好把线程挂起)
void CPrcThread <Worker>::suspend() { ifdef WIN32 //do windows specific things here... #endif #ifdef __linux__ pthread_mutex_lock(&mutex); flag--; pthread_mutex_unlock(&mutex); #endif } void CPrcThread <Worker>::resume() { #ifdef WIN32 //do windows specific things here... #endif #ifdef __linux__ pthread_mutex_lock(&mutex); flag++; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); #endif } void* CPrcThread <Worker>::threadFunc(void* pParameter) { while(1) { #ifdef WIN32 //do windows specific things here... //no member variables accessed here so its ok... #endif #ifdef __linux__ pthread_mutex_lock(&mutex); while(flag <= 0) { pthread_cond_wait(&cond, &mutex); } pthread_mutex_unlock(&mutex); #endif //actual thread work here } }