c++thread学习(1)

现在我们有一个这样的问题:

对一个初始数据A的处理我们能分为两个步骤:

步骤1 :把数据A处理成中间数据B,,需要2s。

步骤2:把中间数据B处理成最终数据C,需要3s。


如果我们写一个单线程的函数,即顺序执行,那么每处理一个数据需要5s。现在我们想对数据处理进行提速:能否缩小处理数据的处理时间?

于是我们想到了多线程。

即:设计两个线程th1,th2,th1处理第一步,th2处理第二步。两个线程并行处理数据,这样处理一个数据的时间就减小至3s。

learn_thread.h

#include<thread>
#include<iostream>
#include<mutex>
#include<vector>

using namespace std;

class learn_thread
 {
    public:
	learn_thread(){}
	void th1();
	void th2();
	vector<int> data;
	 mutex mutex_;	 
 };

learn_thread.cpp

#include"learn_thread.h"
//用睡眠2s代替步骤一的处理时间、用睡眠3秒代表步骤二的处理时间。
//共10个初始数据(A),分别为0至9
void learn_thread::th1()
{
	
	for(int i=0;i<10;i++)
	{
			::_sleep(2000);
		unique_lock<mutex> wlock(mutex_);
	 //  ::_sleep(2000);//两个线程有交集的时间就是互斥量锁住的时间,如果把睡眠2s写在这里,多线程的意义就失去了。
		data.push_back(i+1); //用+1代表步骤一对初始数据A的处理。
		cout<<" --------第"<<i<<"个数据 after th1------------ "<<data.back()<<endl;
		
	}
}
void learn_thread::th2()
{
	for(int i=0;i<10;i++)
	{

		while(data.empty()){cout<<"wait the waitthread "<<endl;}

		unique_lock<mutex> wplock(mutex_); 
	  	::_sleep(3000);
	       data.back()+=2;//用+2代表步骤二对中间数据B的处理,处理后得到C存放原来的位置。
 cout<<"------------第"<<i<<"个数据 after th2---------: "<<data.back()<<endl;
}}

main.cpp

#include"learn_thread.h"

int main()
{
	learn_thread *test=new learn_thread();
	
	thread writetest(&learn_thread::th1,test);
	thread printtest(&learn_thread::th2,test);
	
	th1.join();
    th2.join();
for(vector<int>::iterator it=test->data.begin();it!=test->data.end();it++)
     cout<<"after process : "<<*it<<endl;
     delete test;
	 system("pause");
}
 

运行结果:

 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值