qidao123.com技术社区-IT企服评测·应用市场

标题: 读写锁训练 [打印本页]

作者: 来自云龙湖轮廓分明的月亮    时间: 2025-5-9 15:15
标题: 读写锁训练
步伐中有3个线程,主线程A创建一个文本,每隔6s获取一次体系时间并写入到该文本中,别的两个线程B和C分别从文本中读取当前的时间和日期,子线程B输出体系时间”hh:mm:ss”,子线程C输出体系日期”2025年05月9日”,利用读写锁实现互斥。
  1. /********************************************************************************
  2. *
  3. *
  4. * 读写锁操作
  5. * author:jindouliu2024@163.com
  6. * date:2025.5.9
  7. *
  8. *
  9. * Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
  10. * *******************************************************************************/
复制代码
  1. #include<stdio.h>
  2. #include<time.h>
  3. #include <unistd.h>
  4. #include <pthread.h>
  5. #include <string.h>
  6. pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
  7. void *task_1(void *arg)
  8. {
  9.         char buf[100] = {0};
  10.         while(1){
  11.                 //获取读操作锁
  12.                 pthread_rwlock_rdlock(&rwlock);
  13.                 //以只读方式打开文件
  14.                 FILE *fp = fopen("./a.txt","r");
  15.                 fread(buf,1,100,fp);
  16.                 char *str = strtok(buf,"|");
  17.                 printf("%s\n",str);
  18.                
  19.                 //归还读操作锁
  20.                 pthread_rwlock_unlock(&rwlock);
  21.                 sleep(1);
  22.         }
  23. }
  24. void *task_2(void *arg)
  25. {
  26.         char buf[100] = {0};
  27.         while(1){
  28.                 //获取读操作锁
  29.                 pthread_rwlock_rdlock(&rwlock);
  30.                 //以只读方式打开文件
  31.                 FILE *fp = fopen("./a.txt","r");
  32.                 fread(buf,1,100,fp);
  33.                 char *str = strtok(buf,"|");
  34.                 str = strtok(NULL,"|");
  35.                 printf("%s\n",str);
  36.                
  37.                 //归还读操作锁
  38.                 pthread_rwlock_unlock(&rwlock);
  39.                 sleep(1);
  40.         }
  41. }
  42. int main()
  43. {
  44.         time_t tim;
  45.         struct tm *ptim;
  46.         int wday;
  47.         char buf[100] = {0};
  48.         pthread_t task1;
  49.         pthread_t task2;
  50.         //初始化读写锁
  51.         pthread_rwlock_init(&rwlock,NULL);
  52.         //创建两个线程
  53.         pthread_create(&task1,NULL,task_1,NULL);
  54.         pthread_create(&task2,NULL,task_2,NULL);
  55.         while(1){
  56.                 //获取当前系统时间
  57.                 tim = time(NULL);
  58.                 //转换为年月日时分秒
  59.                 ptim = localtime(&tim);
  60.        
  61.                 //将转换好的日期放入buf
  62.                 sprintf(buf,"%d 年 %d 月 %d 日 | %d :%d : %d\n",
  63.                                                         ptim->tm_year+1900,
  64.                                                         ptim->tm_mon+1,
  65.                                                         ptim->tm_mday,
  66.                                                         ptim->tm_hour,
  67.                                                         ptim->tm_min,
  68.                                                         ptim->tm_sec);
  69.                
  70.                 //获取写操作锁
  71.                 pthread_rwlock_wrlock(&rwlock);
  72.                 //打开一个文件,如果不存在则创建
  73.                 FILE *fp = fopen("./a.txt","w+");
  74.                 //将buf里的内容写入文件
  75.                 fwrite(buf,1,strlen(buf),fp);
  76.                 fclose(fp);
  77.                
  78.                 //归还写操作锁
  79.                 pthread_rwlock_unlock(&rwlock);
  80.                 sleep(6);
  81.         }
  82.         return 0;
  83. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4