qidao123.com技术社区-IT企服评测·应用市场
标题:
读写锁训练
[打印本页]
作者:
来自云龙湖轮廓分明的月亮
时间:
2025-5-9 15:15
标题:
读写锁训练
步伐中有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;
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4