设为首页 加入收藏

TOP

Linux中线程的挂起与恢复(进程暂停)
2014-11-24 02:48:12 来源: 作者: 【 】 浏览:2
Tags:Linux 线程 恢复 进程 暂停

今天在网上查了一下Linux中对进程的挂起与恢复的实现,相关资料少的可怜,大部分都是粘贴复制。也没有完整详细的代码。故自己整理了一下


程序流程为:主线程创建子线程(当前子线程状态为stop停止状态),5秒后主线程唤醒子线程,10秒后主线程挂起子线程,15秒后主线程再次唤醒子线程,20秒后主线程执行完毕等待子线程退出。


代码如下:
#include
#include
#include
#include
#include



#define RUN 1
#define STOP 0



pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;



int status = STOP;
void * thread_function(void)
{
static int i = 0;
while (1)
{
pthread_mutex_lock(&mut);
while (!status)
{
pthread_cond_wait(&cond, &mut);
}
pthread_mutex_unlock(&mut);

printf("child pthread %d\n", i++);
if (i == 20)
break;
sleep(1);
}
}



void thread_resume()
{
if (status == STOP)
{
pthread_mutex_lock(&mut);
status = RUN;
pthread_cond_signal(&cond);
printf("pthread run!\n");
pthread_mutex_unlock(&mut);
}
else
{
printf("pthread run already\n");
}
}



void thread_pause()
{
if (status == RUN)
{
pthread_mutex_lock(&mut);
status = STOP;
printf("thread stop!\n");
pthread_mutex_unlock(&mut);
}
else
{
printf("pthread pause already\n");
}
}



int main()
{
int err;
static int i = 0;
pthread_t child_thread;



#if 0
if (pthread_mutex_init(&mut, NULL) != 0)
printf("mutex init error\n");
if (pthread_cond_init(&cond, NULL) != 0)
printf("cond init error\n");
#endif



err = pthread_create(&child_thread, NULL, (void *)thread_function, NULL);
if (err != 0 )
printf("can't create thread: %s\n", strerror(err));
while(1)
{
printf("father pthread %d\n", i++);
sleep(1);
if (i == 5)
thread_resume();
if (i == 10)
thread_pause();
if (i == 15)
thread_resume();
if (i == 20)
break;
}
if (0 == pthread_join(child_thread, NULL))
printf("child thread is over\n");
return 0;
}


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux多进程之间的文件锁 下一篇Linux系统中的Shell脚本调试技术..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: