http://www.linuxidc.com/Linux/2013-09/90156.htm
今天在網上查了一下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中多執行緒程式設計中pthread_join的理解 http://www.linuxidc.com/Linux/2013-09/89931.htm
Linux多執行緒程式設計時如何檢視一個程式中的某個執行緒是否存活 http://www.linuxidc.com/Linux/2013-09/89930.htm
有關Linux下執行緒的建立 http://www.linuxidc.com/Linux/2013-08/88530.htm
Linux核心執行緒死鎖或死迴圈之後如何讓系統當機重啟 http://www.linuxidc.com/Linux/2013-04/82063.htm
Linux下C語言實現多執行緒檔案複製 http://www.linuxidc.com/Linux/2013-03/81373.htm