• 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");
    }
    
    

    运行结果:

    
    
    
    


  • 相关阅读:
    [ZJOI2006]书架
    luogu P3369 【模板】普通平衡树(splay)
    MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid 上各磁盘状态
    ipmi配置方法-20200328
    debian配置---->/etc/apt/sources.list apt基本源设置指南
    Alien 魔法:RPM 和 DEB 互转
    Debian 9 中设置网络
    SSH自动断开连接的原因-20200323
    mpstat命令
    dstat命令
  • 原文地址:https://www.cnblogs.com/zhubaohua-bupt/p/7182819.html
Copyright © 2020-2023  润新知