当前位置:  技术问答>linux和unix

谁知道条件变量的用法??用 pthread_cond_timedwait()时遇到了问题

    来源: 互联网  发布时间:2015-01-20

    本文导语:  int       pthread_cond_timedwait(pthread_cond_t       *cond, pthread_mutex_t *mutex, const struct timespec *abstime); 用此函数,没有signal时,线程并没有阻塞abstime ,而是马上返回 ETIMEDOUT 即超时 为什么?? 应该怎么用? 谁能给个例...

int       pthread_cond_timedwait(pthread_cond_t       *cond,
pthread_mutex_t *mutex, const struct timespec *abstime);

用此函数,没有signal时,线程并没有阻塞abstime ,而是马上返回 ETIMEDOUT 即超时
为什么??
应该怎么用?
谁能给个例子??


谢谢!!

|
abstime要使用绝对时间,否则可能会出现你所说的情况。

#include 
#include 
#include 
#include 

pthread_cond_t mycond;
pthread_mutex_t mymutex;
int mydata;

void *myfun1(void *)
{

timespec mytime;

while(1)
{
mytime.tv_sec = time(NULL)+1;  //Wait for 1 second, Must 
mytime.tv_nsec = 0;
int ret;
pthread_mutex_lock(&mymutex);
// pthread_cond_wait(&mycond, &mymutex);
ret = pthread_cond_timedwait(&mycond, &mymutex,(const struct timespec *)&mytime);

if( ret != 0 )
{
printf("timeout in %dn",pthread_self());
pthread_mutex_unlock(&mymutex);
continue;
}

while(mydata)    
{
printf("consume in %d (mydata = %d)n",pthread_self(),mydata);
mydata--;
}
pthread_mutex_unlock(&mymutex);
}

}

void *myfun2(void *)
{

while(1)
{
pthread_mutex_lock(&mymutex);
printf("produce in %dn",pthread_self());
mydata++;
pthread_mutex_unlock(&mymutex);
        pthread_cond_signal(&mycond);
        sleep(3);
}
}

int main()
{
mydata = 0;
pthread_t mythread1,mythread2,mythread3;

pthread_cond_init(&mycond,NULL);
pthread_mutex_init(&mymutex,NULL);

pthread_create(&mythread1,NULL,myfun1,NULL);
pthread_create(&mythread2,NULL,myfun2,NULL);
// pthread_create(&mythread3,NULL,myfun1,NULL);
// pthread_create(&mythread3,NULL,myfun2,NULL);

pthread_join(mythread1,NULL);
pthread_join(mythread2,NULL);
// pthread_join(mythread3,NULL);

return 0;
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有谁知道properties文件的用法?
  • 谁知道CATALINA_OPTS的用法
  • 有谁知道ant和Xdoclet到底是用来做什么的,怎么用法???
  • 谁知道vi的详细用法?给我网址者有分:)
  • 谁知道ftcnl 的用法和比较,以及什么网站和书籍有参考,可下载
  • 有谁知道,DOS下的批处理-循环执行命令FOR的用法??(对你来说,可能很简单?
  • 有谁知道 cdrecord, LaTex 或 rar 的基本用法?
  • 急急急!!!进入Cygwin后出现:机器名@机器名$ 提示,不知怎么进入。谁知道详细的用法啊!
  • 有谁知道ramdrive.sys在dos下的详细用法,敬请赐教,倍感感激!!
  • 谁知道websphere的试用版怎么做掉?
  • 谁知道有类似启动kde的指令startkde,来启动gnome?
  • 谁知道jdbc有什么好一点的书,一定给分
  • 请问JBulider 4的序列号谁知到?能否提供给小弟?谢谢
  • 谁知道jbuilder3的KEY
  • 谁知道在哪儿可以找到Imap 4.5
  • 请问谁知道那有classes.zip for jdk1.2 ?
  • 谁知道哪儿有jbuilder5下载
  • 有谁知道关于Applet中怎么样调用html. 50分全送
  • jbuilder5企业版的序列号谁知道?
  • 谁知道JB的书籍下载?
  • 谁知道websphere4该怎么设置
  • 谁知道java认证的日期?
  • 谁知道Borland application server 5.0的serial number 和 key?
  • 请问有谁知道那里有Linux系统的ADSL拨号软件下载!谢谢!
  • 谁知道如何写脚本,一开机就执行某程序?
  • 谁知道哪里有jbulider4下载,我的机器跑jbulider5很慢!
  • 谁知道如何使用sygate作二级代理〉??
  • 有谁知道哪有下载 JB6 的地方?谢谢
  • 谁知道MySQL的驱动接口程序在那里下载?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3