69,382
社区成员
发帖
与我相关
我的任务
分享
pthread_t thread;
int enable = 0;
void* threadFunc(void* args) //工作线程函数
{
while(1)
{
if(enable)
{
work();
}
else
{
sleep(1);
}
}
return ((void*)0);
}
int main()
{
pthread_create(&thread, NULL, threadFunc, NULL);
enable = 1;
sleep(3);
enable = 0;
...
}
pthread_mutex_lock(&mutex));
pthread_cond_wait(&cond,&mutex);
pthread_cond_signal(&cond);
void* threadFunc(void* args) //工作线程函数
{
while(1)
{
if(!pthread_pause)
{
printf("working...");
//work();
}
else
{
printf("rest...");
}
sleep(1);
}
return ((void*)0);
}
pthread_t thread;
int main()
{
pthread_create(&thread, NULL, threadFunc, NULL);
while (1){
int c = getchar();
if (c=='s') pthread_suspend();
if (c=='r') pthread_resume();
//if (c=='c') pthread_pause_location();
}
return 0;
}
pthread_t thread;
int enable = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void* threadFunc(void* args) //工作线程函数
{
while(1)
{
if(enable)
{ work();
}
else
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond);
pthread_mutex_unlock(&mutex);
}
}
return ((void*)0);
}
int main()
{
pthread_create(&thread, NULL, threadFunc, NULL);
enable = 1;
pthread_cond_signal(&cond);
sleep(3);
enable = 0;
...
}
不知道这样有没有什么问题?#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
pthread_mutex_t mutex_pause = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_pause = PTHREAD_COND_INITIALIZER;
bool pthread_pause = false;
void pthread_suspend(void)
{
if (pthread_pause == false)
{
pthread_mutex_lock( &mutex_pause );
pthread_pause = true;
printf("------pthread pause------/n");
pthread_mutex_unlock( &mutex_pause );
}
else
{
printf("pthread suspend already/n");
}
}
void pthread_resume(void)
{
if (pthread_pause == true)
{
pthread_mutex_lock(&mutex_pause);
pthread_pause = false;
pthread_cond_broadcast(&cond_pause);
printf("------pthread resume------/n");
pthread_mutex_unlock(&mutex_pause);
}
else
{
printf("pthread resume already/n");
}
}
void pthread_pause_location(void)
{
pthread_mutex_lock(&mutex_pause);
while(pthread_pause)
{
pthread_cond_wait(&cond_pause, &mutex_pause);
}
pthread_mutex_unlock(&mutex_pause);
}