马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
步伐中有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企服之家,中国第一个企服评测及商务社交产业平台。 |