3个回答
展开全部
你是做实验了还是看书了,哪里说sleep会导致其他线程休眠呢?(windows下MFC里面随意sleep似乎会导致这样?)
下面的短程序拿回去编译下,就知道到底sleep会不会使得其他线程也休眠了。
pthread_cond_wait当然可以使得线程休眠,只是你还得在另外一个线程中使得pthread_cond_wait的等待的条件满足才可以使得介个线程返回,不觉得单纯为了等待多开一个线程会很麻烦?那你愿意别的方式也可以阿...POSIX的互斥、信号量都能控制线程,不是简单的等待功能。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void thread1(void)
{
int i=0;
while(i<10)
{
sleep(3);
printf("t1\n");
fflush(stdout);
i++;
}
}
void thread2(void)
{
int i=0;
while(i<10)
{
sleep(1);
printf("t2\n");
fflush(stdout);
i++;
}
}
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,(void*)thread1,NULL);
pthread_create(&t2,NULL,(void*)thread2,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
下面的短程序拿回去编译下,就知道到底sleep会不会使得其他线程也休眠了。
pthread_cond_wait当然可以使得线程休眠,只是你还得在另外一个线程中使得pthread_cond_wait的等待的条件满足才可以使得介个线程返回,不觉得单纯为了等待多开一个线程会很麻烦?那你愿意别的方式也可以阿...POSIX的互斥、信号量都能控制线程,不是简单的等待功能。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void thread1(void)
{
int i=0;
while(i<10)
{
sleep(3);
printf("t1\n");
fflush(stdout);
i++;
}
}
void thread2(void)
{
int i=0;
while(i<10)
{
sleep(1);
printf("t2\n");
fflush(stdout);
i++;
}
}
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,(void*)thread1,NULL);
pthread_create(&t2,NULL,(void*)thread2,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
追问
今天看到我们老师用了nanosleep(),这些API区别大吗?网上查了知道个大概,usleep()和sleep()系统内部都是调用了nanosleep().....
关于pthread_cond_wait()可以给个易明白的例子吗?谢谢啦
追答
各种sleep区别不是很大...(我这话说的不太负责任,不过我没觉得有什么大差别...需要不同而已,sleep就是秒级的,msleep就是毫秒,估计都几乎是用anosleep做出来的吧)
自己man 一下pthread_cond_wait不就出来了么..
int pthread_cond_wait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex);
int pthread_cond_timedwait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex,
const struct timespec *restrict abstime);
The pthread_cond_timedwait() and pthread_cond_wait() functions shall block on a condition variable. They shall be called with mutex locked by the calling thread or undefined behavior results.
参数中的cond是一个条件表达式..
下面这段E文是man手册里面的,意思是调用这个函数之前,先将参数中的mutex变量锁住,然后再调用这个API,这个thread就会阻塞在这里,当cond(手册中说叫condition variable,条件变量)为真时,这个thread会继续运行...
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sleep(秒)~~
追问
sleep()会使该使所有的线程睡眠的.....
好像usleep()可以
pthread_cond_timedwait()也可以
不确定着....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询