测试sleep()和pthread_cond_timewait()之间的区别

测试sleep()和pthread_cond_timewait()之间的区别用来测试sleep()和pthread_cond_timewait()之间的区别通过#if0/1来分别测试当从终端输入q时,通过打印来判断是否可以立即返回结束线程,还是要等睡眠时间到了才能结束线程。当条件满足时,pthread_cond_signal()来触发代码#include<stdio.h>#include<stdlib.h>#include<strin…

大家好,又见面了,我是你们的朋友全栈君。

用来测试sleep()和pthread_cond_timewait()之间的区别

通过#if 0/1 来分别测试

当从终端输入q时,通过打印来判断是否可以立即返回结束线程,还是要等睡眠时间到了才能结束线程。

当条件满足时,pthread_cond_signal()来触发

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>

#include<pthread.h>
#include <signal.h> 

int flag = 1;
void* print_a(void*);
void* print_b(void*);

pthread_cond_t		cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t		cond_mutex = PTHREAD_MUTEX_INITIALIZER;

int main()
{
	pthread_t pth[2];
	char c;

	if(pthread_create(&pth[0],NULL,print_a,NULL) ==-1)
	{
		printf("----pth[0]error--------\n");
		exit(-1);
	}


	if(pthread_create(&pth[1],NULL,print_b,NULL) ==-1)
	{
		printf("----pth[1]error--------\n");
		exit(-1);
	}


	while ((c = getchar()) != 'q');
	
	flag = 0;
	
	
	printf("----end----------\n");
	
	pthread_cond_signal(&cond);  
	
        if(pthread_join(pth[0], NULL) == -1){
            puts("fail to recollect t0");
            exit(1);
        }
    
	pthread_cond_signal(&cond);  
	
        if(pthread_join(pth[1], NULL) == -1){
        puts("fail to recollect t1");
        exit(1);
        }

    
	printf("-bye\n");

	return 0 ;
}

void* print_a(void* a)
{
	
	struct	timespec	timeout;
	
	while(flag){

#if 0
		timeout.tv_sec = time(NULL) + 30;
		timeout.tv_nsec = 0;

		//printf("aa\n");
		/* Mutex must be locked for pthread_cond_timedwait... */
		
		pthread_mutex_lock(&cond_mutex);
		/* Thread safe "sleep" */
		pthread_cond_timedwait(&cond, &cond_mutex, &timeout);

		/* No longer needs to be locked */
		pthread_mutex_unlock(&cond_mutex);
#else
		sleep(30);
#endif
	}
	

	printf("----aa-----------\n");
	
}



void* print_b(void* b)
{
	struct	timespec	timeout;
	
	while(flag){
#if 0
		timeout.tv_sec = time(NULL) + 40;
		timeout.tv_nsec = 0;
		pthread_mutex_lock(&cond_mutex);
		printf("bb\n");
		/* Mutex must be locked for pthread_cond_timedwait... */
		
		/* Thread safe "sleep" */
		pthread_cond_timedwait(&cond, &cond_mutex, &timeout);

		/* No longer needs to be locked */
		pthread_mutex_unlock(&cond_mutex);
#else
		sleep(50);
#endif
	}
	
	printf("----bb-----------\n");
}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143758.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 学习使用PSTools工具中的psping

    学习使用PSTools工具中的psping目录初识PsToolspsping1.使用ICMPping2.使用TCPping3.延迟测试4.带宽测试5.同功能的tcping工具总结初识PsTools    在工作中我们都会想探测某个IP是否能通,基本上都使用过ping命令,但是某些服务器禁用了ping,而且有些时候也想探测某个IP的某个端口是否能通。之前的我一般都是用“telnetipport”,但是我发现一个不好的体验就是没啥…

    2025年7月26日
    3
  • 激活码2089(已测有效)

    激活码2089(已测有效),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    100
  • MySQL提示Can‘t connect to MySQL server on localhost (10061)解决方法

    MySQL提示Can‘t connect to MySQL server on localhost (10061)解决方法

    2021年10月2日
    103
  • 外贸英文外链代发布

    外贸英文外链代发布  能进来看到这篇文章,就说明大家都是有发布英文seo外链需求的人,平时比较忙,一个人忙不过来,没有时间发外链,或者自己外链资源太少,外链质量不高,网站总是没人气,没订单怎么办,这时候我们出现了,mmoboy专业团队,提供优质的英文外链服务:  通过人工注册博客、论坛、新闻等站点回复留言,把网站推广出去,制造手工的回复式外部链接。提高你的网站客户IP流量,增加网站的反向链接和google的收录…

    2022年5月17日
    41
  • JAVA设置HttpOnly Cookies

    JAVA设置HttpOnly CookiesHttpOnlyCook 是一个 cookie 安全行的解决方案 在支持 HttpOnlycook 的浏览器中 IE6 FF3 0 如果在 Cookie 中设置了 HttpOnly 属性 那么通过 JavaScript 脚本将无法读取到 Cookie 信息 这样能有效的防止 XSS 攻击 让网站应用更加安全 nbsp 但是 J2EE4 J2EE5 的 Cookie 并没有提供设置 HttpOnly 属性

    2025年7月25日
    3
  • 一文看懂半监督学习(Semi-supervised Learning)和自监督学习(Self-Supervised Learning)

    一文看懂半监督学习(Semi-supervised Learning)和自监督学习(Self-Supervised Learning)1.机器学习学习任务1.1监督学习根据输入-输出样本对L={(x1,y1),⋅⋅⋅,(xl,yl)}L=\{(x1,y1),···,(xl,yl)\}L={(x1,y1),⋅⋅⋅,(xl,yl)}学习输入到输出的映射f:X−>Yf:X->Yf:X−>Y,来预测测试样例的输出值。SL包括分类(Classification)和回归(Regression)两类任务,分类中的样例xi∈Rmx_i∈R^mxi​∈Rm(输入空间),类标签yi∈{c1,c2,⋅⋅⋅,cc}y_i∈\{c_1,c

    2022年9月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号