# 2023/2/28 线程练习

2023/2/28 线程练习

1.标准IO函数时候讲解的时钟代码,要求输入quit字符串后,结束进程

#include "head.h"
//时钟代码,要去输入quit字符串后,结束进程

int get_line(FILE* fp)
{
	int line = 0;
	char str[32] = "";
	while(1)
	{
		if(NULL == fgets(str,sizeof(str),fp))
		{
			break;
		}else if('\n' == str[strlen(str)-1])
		{
			line++;
		}
	}
	if(str[strlen(str)-1] != '\n')
	{
		line++;
	}
	return line;
}

void* time_clock(void* arg)
{
	time_t t1;
	struct tm *info = NULL;

	while(1)
	{
		time(&t1);
		info = localtime(&t1);
		fflush(stdout);
		//fprintf(stdout,"%4d-%02d-%02d %02d:%02d:%02d ",\
				info->tm_year+1900,info->tm_mon+1,info->tm_mday,\
				info->tm_hour,info->tm_min,info->tm_sec);
		printf("%4d-%02d-%02d %02d:%02d:%02d\r",\
				info->tm_year+1900,info->tm_mon+1,info->tm_mday,\
				info->tm_hour,info->tm_min,info->tm_sec);

		fflush(stdout);
		sleep(1);
	}

}

int main(int argc, const char *argv[])
{
	int ret_c = 0;

	pthread_t tid;
	
	printf("时钟开始,输入quit停止\n");
	if(pthread_create(&tid,NULL,time_clock,&ret_c) != 0)
	{
		fprintf(stderr,"pthread_create failed __%d__\n",__LINE__);
		return -1;
	}

	while(1)
	{
		char choose[10] = "";
		scanf("%s",choose);
		if(0 == strcmp(choose,"quit"))
		{
			pthread_detach(tid);
			printf("时钟结束\n");
			void* ptr = NULL;
			pthread_join(tid,&ptr);
			free(ptr);
			ptr = NULL;
			break;
		}
	}

	return 0;
}

在这里插入图片描述

要求定义一个全局变量 char buf[] = “1234567”,创建两个线程,不考虑退出条件。

1.线程循环打印buf字符串
2.线程循环倒置buf字符串,即buf中本来存储1234567,倒置后buf中存储7654321. 不打印!!
3.倒置不允许使用辅助数组。
4.要求A线程打印出来的结果只能为 1234567 或者 7654321
5.不允许使用sleep函数

#include "head.h"

static char buf[]="1234567";
void strRev()
{
	int i,j;
	char temp;
	i = 0;
	j = strlen(buf)-1;
	while(i<j)
	{
		temp = buf[i];
		buf[i] = buf[j];
		buf[j] = temp;
		i++;
		j--;
	}
}

void* callBack1(void* arg)
{

	while(1)
	{
		printf("A:");
		puts((char*)arg);	
		//sleep(1);
	}
}


void* callBack2(void* arg)
{
	while(1)
	{
		strRev();		//sleep(1);
	}
}


int main(int argc, const char *argv[])
{
	pthread_t tid1,tid2;
	if(pthread_create(&tid1,NULL,callBack1,buf) != 0)
	{
		fprintf(stderr,"pthread_create failed __%d__\n",__LINE__);
		return -1;
	}
	if(pthread_create(&tid2,NULL,callBack2,buf) != 0)
	{
		fprintf(stderr,"pthread_create failed __%d__\n",__LINE__);
		return -1;
	}

	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);




	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值