网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > C语言 >

读写锁练习

时间:2025-05-09 15:14

人气:

作者:admin

标签:

导读:程序中有3个线程,主线程A创建一个文本,每隔6s获取一次系统时间并写入到该文本中,另外两个线程B和C分别从文本中读取当前的时间和日期,子线程B输出系统时间”hh:mm:ss”,子线程...

程序中有3个线程,主线程A创建一个文本,每隔6s获取一次系统时间并写入到该文本中,另外两个线程B和C分别从文本中读取当前的时间和日期,子线程B输出系统时间”hh:mm:ss”,子线程C输出系统日期”2025年05月9日”,使用读写锁实现互斥。

/********************************************************************************
*
*
* 读写锁操作
* author:jindouliu2024@163.com 
* date:2025.5.9
* 
*
* Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
* *******************************************************************************/

#include<stdio.h>
#include<time.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
void *task_1(void *arg)
{
	char buf[100] = {0};
	while(1){
		//获取读操作锁
		pthread_rwlock_rdlock(&rwlock);
		//以只读方式打开文件
		FILE *fp = fopen("./a.txt","r");
		fread(buf,1,100,fp);
		char *str = strtok(buf,"|");
		printf("%s\n",str);
		
		//归还读操作锁
		pthread_rwlock_unlock(&rwlock);
		sleep(1);
	}

}
void *task_2(void *arg)
{
	char buf[100] = {0};
	while(1){
		//获取读操作锁
		pthread_rwlock_rdlock(&rwlock);
		//以只读方式打开文件
		FILE *fp = fopen("./a.txt","r");
		fread(buf,1,100,fp);
		char *str = strtok(buf,"|");
		str = strtok(NULL,"|");
		printf("%s\n",str);
		
		//归还读操作锁
		pthread_rwlock_unlock(&rwlock);
		sleep(1);
	}
}
int main()
{
	time_t tim;
	struct tm *ptim;
	int wday;
	char buf[100] = {0};
	pthread_t task1;
	pthread_t task2;
	//初始化读写锁
	pthread_rwlock_init(&rwlock,NULL);
	//创建两个线程
	pthread_create(&task1,NULL,task_1,NULL);
	pthread_create(&task2,NULL,task_2,NULL);
	while(1){
		//获取当前系统时间
		tim = time(NULL);
		//转换为年月日时分秒
		ptim = localtime(&tim);
	
		//将转换好的日期放入buf
		sprintf(buf,"%d 年 %d 月 %d 日 | %d :%d : %d\n",
							ptim->tm_year+1900,
							ptim->tm_mon+1,
							ptim->tm_mday,
							ptim->tm_hour,
							ptim->tm_min,
							ptim->tm_sec);
		
		//获取写操作锁
		pthread_rwlock_wrlock(&rwlock);
		//打开一个文件,如果不存在则创建
		FILE *fp = fopen("./a.txt","w+");
		//将buf里的内容写入文件
		fwrite(buf,1,strlen(buf),fp);
		fclose(fp);
		
		//归还写操作锁
		pthread_rwlock_unlock(&rwlock);
		sleep(6);

	}
	return 0;

}
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信