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;
}
相关推荐
赔罪几秒前
Python 高级特性-切片
开发语言·python
专注VB编程开发20年1 分钟前
除了 EasyXLS,加载和显示.xlsx 格式的excel表格,并支持单元格背景色、边框线颜色和粗细等格式化特性
c++·windows·excel·mfc·xlsx
分别努力读书39 分钟前
acm培训 part 7
算法·图论
武乐乐~41 分钟前
欢乐力扣:赎金信
算法·leetcode·职场和发展
'Debug1 小时前
算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
算法
Natsuagin1 小时前
轻松美化双系统启动界面与同步时间设置(Windows + Ubuntu)
linux·windows·ubuntu·grub
Fansv5871 小时前
深度学习-2.机械学习基础
人工智能·经验分享·python·深度学习·算法·机器学习
子豪-中国机器人1 小时前
2月17日c语言框架
c语言·开发语言
我们的五年1 小时前
【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
linux·网络·http
夏天的阳光吖1 小时前
C++蓝桥杯基础篇(四)
开发语言·c++·蓝桥杯