• 手撕代码之线程:thread类简单使用


    转载于:https://blog.csdn.net/qq_22494029/article/details/79273127

    简单多线程例子:

    detch()启动线程:

     1 #include <iostream>
     2 #include <thread>
     3 using namespace std;
     4 void testThread1();
     5 void testThread2();
     6 int main()
     7 {
     8     thread t1(testThread1);
     9     t1.detach();
    10     thread t2(testThread2);
    11     t2.detach();
    12     cout<<"主线程:你好帅!!!"<<endl;
    13     std::this_thread::sleep_for(std::chrono::milliseconds(10000));
    14     return 0;
    15 }
    16 void testThread1()//线程1
    17 {
    18     for (int i = 0; i <10 ; ++i) {
    19         cout<<"testThread1:"<<i<<endl;
    20         //暂停100毫秒
    21         std::this_thread::sleep_for(std::chrono::milliseconds(100));
    22     }
    23 }
    24 void testThread2()//线程2
    25 {
    26     for (int i = 100; i < 110; ++i) {
    27         cout<<"testThread2:"<<i<<endl;
    28         this_thread::sleep_for(chrono::milliseconds(100));
    29     }
    30 }

    说明:detch()方法的意思就是开启子线程,并且主线程不等待子线程运行完毕,而是和子线程并行运行。

    运行结果:

    join()方法启动线程:

     1 #include <iostream>
     2 #include <thread>
     3 using namespace std;
     4 void testThread1();
     5 void testThread2();
     6 int main()
     7 {
     8     thread t1(testThread1);
     9     t1.join();
    10     thread t2(testThread2);
    11     t2.join();
    12     cout<<"主线程:你好帅!!!"<<endl;
    13     return 0;
    14 }
    15 void testThread1()//线程1
    16 {
    17     for (int i = 0; i <10 ; ++i) {
    18         cout<<"testThread1:"<<i<<endl;
    19         //暂停100毫秒
    20         std::this_thread::sleep_for(std::chrono::milliseconds(100));
    21     }
    22 }
    23 void testThread2()//线程2
    24 {
    25     for (int i = 100; i < 110; ++i) {
    26         cout<<"testThread2:"<<i<<endl;
    27         this_thread::sleep_for(chrono::milliseconds(100));
    28     }
    29 }

    说明:join()方法的意思就是开启子线程,线程会按照开启的先后顺序同步运行。

    运行结果:

    子线程函数带有参数的多线程:

     1 #include <iostream>
     2 #include <thread>
     3 using namespace std;
     4 void testThread1(int count);
     5 void testThread2(int start,int count);
     6 int main()
     7 {
     8     thread t1(testThread1,10);
     9     t1.join();
    10     thread t2(testThread2,40,50);
    11     t2.join();
    12     cout<<"主线程:你好帅!!!"<<endl;
    13     return 0;
    14 }
    15 void testThread1(int count)
    16 {
    17     for (int i = 0; i <count; ++i) {
    18         cout<<"testThread1:"<<i<<endl;
    19         this_thread::sleep_for(chrono::milliseconds(100));
    20     }
    21 }
    22 void testThread2(int start,int count)
    23 {
    24     for (int i = start; i <count ; ++i) {
    25         cout<<"testThread2:"<<i<<endl;
    26         this_thread::sleep_for(chrono::milliseconds(100));
    27     }
    28 }

    运行结果:

     多线程安全访问共享数据例子(卖票)

     1 //多线程安全访问共享数据例子(卖票)
     2 #include <iostream>
     3 #include <thread>
     4 #include <mutex>
     5 using namespace std;
     6 class ThreadTest
     7 {
     8 private:
     9     //票的剩余数目
    10     int sum;
    11     mutex Mutex;
    12 public:
    13     //构造函数,构造的时候开启线程
    14     ThreadTest()
    15     {
    16         sum=20;
    17         thread t1(&ThreadTest::Thread1,this);
    18         t1.detach();
    19         thread t2(&ThreadTest::Thread2,this);
    20         t2.detach();
    21     }
    22     //析构函数
    23     ~ThreadTest(){}
    24 
    25     //卖票线程1
    26     void Thread1()
    27     {
    28         while(true)
    29         {
    30 
    31             this_thread::sleep_for(chrono::milliseconds(100));
    32             Mutex.lock();//加锁
    33             --sum;
    34             if(sum<0)
    35             {
    36                 cout<<"Thread1--票卖完了"<<sum<<endl;
    37                 break;
    38             }
    39             cout<<"Thread1--剩余票数:"<<sum<<endl;
    40             Mutex.unlock();
    41         }
    42         Mutex.unlock();
    43     }
    44     //卖票线程2
    45     void Thread2()
    46     {
    47         while(true)
    48         {
    49             this_thread::sleep_for(chrono::milliseconds(100));
    50             Mutex.lock();//加锁
    51             sum--;
    52             if(sum<0)
    53             {
    54                 cout<<"Thread2--票卖完了"<<sum<<endl;
    55                 break;
    56             }
    57             cout<<"Thread2--剩余票数:"<<sum<<endl;
    58             Mutex.unlock();
    59         }
    60         Mutex.unlock();
    61     }
    62 };
    63 int main()
    64 {
    65     //多线程卖票类
    66     ThreadTest SaleThread;
    67     this_thread::sleep_for(chrono::milliseconds(10000));
    68     return 0;
    69 }

    运行结果:

  • 相关阅读:
    《四世同堂》金句摘抄(一)
    Django打造在线教育平台_day_3: 搭建后台管理系统Xadmin之其他app的数据表注册
    Django打造在线教育平台_day_3: 搭建后台管理系统Xadmin
    Django打造在线教育平台_day_3: 搭建后台管理系统Django自带的admin
    Django打造在线教育平台_day_2:新建operation app 编写models
    Django打造在线教育平台_day_2:新建organization app 编写models
    Django打造在线教育平台_day_2:新建courses app 编写models
    Django打造在线教育平台_day_2:新建users app 编写models之完善
    Django打造在线教育平台_day_2:新建users app 编写models之扩展user表
    Django打造在线教育平台_day_1:开发环境与项目的搭建
  • 原文地址:https://www.cnblogs.com/yichengming/p/11506395.html
Copyright © 2020-2023  润新知