c++标准io与线程,互斥锁
- 互联网
- 2025-08-27 23:33:02

封装一个 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; }
c++标准io与线程,互斥锁由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“c++标准io与线程,互斥锁”
上一篇
MySQL六大日志的功能介绍。