- 论坛徽章:
- 0
|
我在linux上,想用pthread库实现这样的功能:我有2个线程:一个主线程,一个工作线程,在主线程中创建工作线程。工作线程不总是工作,也就是说,创建的时候处于暂停状态或休眠状态(不占cpu),当主线程通知它工作的时候就开始工作。开始工作之后,当主线程需要暂停它的时候可以通知它使它暂停。然后工作线程又处于暂停状态(不占cpu)。之后类似,主线程可以随时通知工作线程开始工作,随时暂停工作线程。
我开始的想法是这样的:
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;
...
}
但感觉用sleep不太好,因为sleep的时间其实不好定。太长太短都不好。其实主线程什么时候启动什么时候暂停工作线程,都是确定的。主线程其实是响应用户的请求,用户说开始work就应该马上work,用户说停止就应该马上停止。
后来我想用条件变量,在工作线程中:
pthread_mutex_lock(&mutex));
pthread_cond_wait(&cond,&mutex);
在主线程中:
pthread_cond_signal(&cond);
但是这样只能启动,无法暂停?
不知道各位大侠有没有什么办法?代码应该如何写呢?
多谢了!
|
|