测试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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 【JAVA】【NIO】3、Java NIO Channel

    【JAVA】【NIO】3、Java NIO Channel

    2022年1月3日
  • java对文件操作,删除文件,强制删除文件「建议收藏」

    java对文件操作,删除文件,强制删除文件「建议收藏」/** *删除文件夹(强制删除) * *@parampath */ publicstaticvoiddeleteAllFilesOfDir(Filepath){ if(null!=path){ if(!path.exists()) return; if(path.isFile()){ booleanresult=path.dele…

    2022年5月20日
  • Maven配置及IDEA中配置Maven详解

    Maven配置及IDEA中配置Maven详解1、Maven安装配置首先到官网下载http://maven.apache.org/download.cgi 我们需要下载的bin.zip结尾的文件,下载后解压到指定文件夹(全英文路径) 配置环境变量确保JAVA环境变量已经配置好了。添加M2_HOME和MAVEN_HOME环境变量到Windows环境变量。 PATH变量添加%M2_HOME%\bin修…

    2022年5月11日
  • LMS波束形成

    LMS波束形成LMS自适应波束形成器%标量阵最小均方准则(LMS)自适应波束形成器(ADBF)closeall;Sound_velocity=1200;%声速Frequency=300;%信号频率Sample_Frequency=100Frequency;%采样频率Array_num=16;%阵元数Array_distance=1/2(Sound_velocity/Frequency)…

    2022年6月15日
  • idea-2021.12.13的激活码(JetBrains全家桶)

    (idea-2021.12.13的激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月30日
  • mongodb服务启动失败_mongodb启动不了

    mongodb服务启动失败_mongodb启动不了在操作前需要启动mongodb数据库服务1.首先打开dos窗口,然后选择路径到你的安装路径下的bin目录(我的路径是的D:mongo\mongodb\bin)2.然后输入启动命令(D:mongo\data\db是我的数据库文件的目录前边两个–不能少)mongod–dbpathD:mongo\data\db3.回车dos界面出现12701的字样说明服务启动成功了如…

    2022年4月19日

发表回复

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

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