测试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");
}


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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Qt高级——QMake快速入门

    Qt高级——QMake快速入门一、QMake简介qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。qmake是一个用来简化在不同平台间开发工程的构建过程的工具。qmake会自动生成MakeFile文件,可以用于任何软件项目中,无论是否由Qt编写。qmake会注意所有的编译器和平台的依赖性,开发者只需关注自己的代码。qmake作为Qt库和Qt所提供的工具的主要连编工具,可以自动的包含moc和uic的连编规则。二、QMake入门教程1、创建一个工程创建一个应用,包含hell

  • airplay影像_播放ftp服务器的视频

    airplay影像_播放ftp服务器的视频http://bbs.weiphone.com/read-htm-tid-1785042.htmliOS客户端软件:AirPlayer[支持RMVB,MKV,MP4,AVI等等格式],另外有个PulgPlayer不支持RMVBMKV等等格式。PC端媒体服务器:WIN7自带的媒体中心(论坛有设置方法的教程,这不介绍了)…

  • RSA加密算法的java实现

    RSA加密算法的java实现最近有一个外部合作项目要求在数据传输过程中使用RSA加密算法对数据进行加密,所以需要编写一个加解密的工具类,因为对方不是java语言,所以是各自实现的这个工具,本文主要讨论实现以及双方调试过程中的一些插曲,希望给大家不要再次踩坑。关于加解密的核心部分,网上有很多博主都有实现过,我也是参考了一些博主的方法自己实现了一个加解密的工具。packagecom.chen.test;importorg.

  • webpack(9)plugin插件功能的使用「建议收藏」

    webpack(9)plugin插件功能的使用「建议收藏」plugin插件是webpack的支柱功能。webpack自身也是构建于你在webpack配置中用到的相同的插件系统之上!插件目的在于解决loader无法实现的其他事。常用的插件

  • java中如何进行异常处理_java检查时异常

    java中如何进行异常处理_java检查时异常运行时异常是Java编程语言所有异常的父类,这些异常在发生时会崩溃或崩溃,可能会破坏程序或应用程序。与不被视为运行时异常的异常不同,永远不会检查运行时异常。“运行时异常”通常显示程序员的错误,而不是预期程序要处理的条件。当无法发生的情况时,也会使用运行时异常。应该注意的是,当程序内存不足时,将引发程序错误,而不是将其显示为运行时异常。最常见的运行时异常为NullPointerException,A…

  • DHCP简单配置-CISCO

    DHCP简单配置-CISCO

发表回复

您的电子邮箱地址不会被公开。

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