linux 线程挂起恢复的简单示例

来源:互联网 发布:中国停止登月计划 知乎 编辑:程序博客网 时间:2024/05/21 14:05

参考:

http://blog.csdn.net/chennxi/article/details/6234529《Linux下线程的挂起和恢复

写了个demo:

#include <unistd.h>#include <pthread.h>static pthread_mutex_t mutex;static pthread_cond_t cond;static int flag = 0;void srpthread_init(){pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL);}void srpthread_suspend(){pthread_mutex_lock(&mutex);flag--;pthread_mutex_unlock(&mutex);}void srpthread_resume(){pthread_mutex_lock(&mutex);flag++;pthread_cond_signal(&cond);pthread_mutex_unlock(&mutex);}void *thread_run(){while(1){pthread_mutex_lock(&mutex);while(flag<=0){pthread_cond_wait(&cond,&mutex);}pthread_mutex_unlock(&mutex);//actual workprintf("i am running!\n");}}int main(int argc,char *argv[]){char ch;pthread_t p1;srpthread_init();pthread_create(&p1,NULL,(void *)thread_run,NULL);while(1){scanf("%c",&ch);switch(ch){case 's':srpthread_suspend();break;case 'r':srpthread_resume();break;default:break;}}#if 0printf("1111\n");srpthread_resume();printf("2222\n");sleep(3);printf("3333\n");srpthread_suspend();printf("4444\n");#endifreturn 1;}

编译命令:
gcc file.c -o file lpthread

原创粉丝点击