当前位置: 首页 > news >正文

c++标准io与线程,互斥锁

 封装一个 File 类,

用有私有成员 File* fp

实现以下功能

File f = "文件名" 要求打开该文件

f.write(string str) 要求将str数据写入文件中

string str = f.read(int size) 从文件中读取最多size个字节,

并将读取到的数据返回 析构函数

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>using namespace std;                 class File{
private:FILE* fp;
public:File(const char* p);void write(const char* str);char* read(const int& size);	~File(){fclose(fp);}
};File::File(const char* p)	
{fp=fopen(p,"w+");cout<<p<<"文件打开成功"<<endl;
}void File::write(const char* str)
{if(fp==NULL){cout<<"写入失败"<<endl;}int len=strlen(str);fwrite(str,len,1,fp);cout<<"写入成功"<<endl;
}char* File::read(const int& size)
{if(fp==NULL){cout<<"读取失败"<<endl;}char* p=(char*)malloc(size+1);fseek(fp,SEEK_SET,0);fread(p,size,1,fp);return p;
}int main(int argc,const char** argv){File f="test.txt";cout<<"请输入文件内容"<<endl;char str1[64];cin>>str1;f.write(str1);int size;cout<<"请输入读取多少数据"<<endl;cin>>size;char* p=f.read(size);cout<<p<<endl;free(p);return 0;
}

 

 封装一个 Mutex 互斥锁类 要求:

构造函数:初始化互斥锁,

并选择互斥锁的种类 lock 上锁互斥锁

unlock 解锁互斥锁 析构函数,

销毁互斥锁

并且开启一个线程测试该互斥锁

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <signal.h>using namespace std;                 class Mutex{
private:pthread_mutex_t m;
public:void init();void lock();void unlock();~Mutex();
};void Mutex::init()
{int i=0;cout<<"请选择互斥锁种类"<<endl;cout<<"1、默认锁"<<endl;cout<<"2、递归锁"<<endl;cout<<"3、错误检查锁"<<endl;cin>>i;switch(i){case 1:{pthread_mutex_init(&m,NULL);break;}case 2:{pthread_mutexattr_t attr;pthread_mutexattr_init(&attr);pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE_NP);pthread_mutex_init(&m,&attr);pthread_mutexattr_destroy(&attr);break;}case 3:{pthread_mutexattr_t attr;pthread_mutexattr_init(&attr);pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_ERRORCHECK_NP);pthread_mutex_init(&m,&attr);pthread_mutexattr_destroy(&attr);break;}}
}void Mutex::lock()
{pthread_mutex_lock(&m);
}void Mutex::unlock()
{pthread_mutex_unlock(&m);
}Mutex::~Mutex()
{pthread_mutex_destroy(&m);cout<<"析构成功"<<endl;
}/*-----------------------------------------------*/Mutex mutex1,mutex2;//设置全局的对象int flag=1;void task1()
{while(flag){mutex1.lock();printf("1号在看电视\n");sleep(1);mutex2.unlock();}
}void task2()
{while(flag){mutex2.lock();printf("2号在打游戏\n");sleep(1);mutex1.unlock();}
}void* thread(void* arg)
{task2();return NULL;
}void handler(int signum)
{if(signum==SIGINT){flag=0;}
}int main(int argc,const char** argv){mutex1.init();mutex2.init();mutex2.lock();signal(SIGINT,handler);pthread_t id;pthread_create(&id,0,thread,0);pthread_detach(id);task1();sleep(1);return 0;
}

 

http://www.lryc.cn/news/540460.html

相关文章:

  • java简单实现请求deepseek
  • Ext系列文件系统 -- 磁盘结构,磁盘分区,inode,ext文件系统,软硬链接
  • PyTorch Tensor 形状变化操作详解
  • 文字识别软件cnocr学习笔记
  • 本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】
  • macOS部署DeepSeek-r1
  • 基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统
  • 基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)
  • C++中const T为什么少见?它有什么用途?
  • Leetcode 位计算
  • SpringBoot3.x整合WebSocket
  • 猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势
  • STM32创建静态库lib
  • Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠
  • MAC快速本地部署Deepseek (win也可以)
  • javaEE-13.spring MVC
  • C/C++ | 每日一练 (2)
  • Nginx 常用命令和部署详解及案例示范
  • GO大模型应用开发框架-
  • 保姆级!springboot访问Ollama API并调用DeepSeek模型 Api
  • 力扣hot100 ——搜索二维矩阵 || m+n复杂度优化解法
  • 娱乐使用,可以生成转账、图片、聊天等对话内容
  • 【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门
  • 使用 FFmpeg 剪辑视频指南
  • AWS云从业者认证题库 AWS Cloud Practitioner
  • 高性能内存对象缓存Memcached详细实验操作
  • 【C++复习专题】—— 类和对象,包含类的引入、访问限定符、类的6个默认成员函数等
  • Three.js 快速入门教程【一】开启你的 3D Web 开发之旅
  • Windows 图形显示驱动开发-CPU 内存调节和64KB 页面支持
  • PLC通信交互系统技术分享