zoukankan      html  css  js  c++  java
  • c++ 11线程测试

      1 #include <ctime>
      2 #include <iostream>
      3 #include <vector>
      4 #include <thread>
      5 #include <atomic>
      6 #include <mutex>
      7 
      8 #include <Windows.h>
      9 
     10 #define SIZE 1000000
     11 
     12 std::atomic<int> g_seq1;
     13 int g_seq2;
     14 int g_seq3;
     15 int g_seq4;
     16 
     17 std::atomic_flag af = ATOMIC_FLAG_INIT;
     18 std::mutex mtx;
     19 
     20 CRITICAL_SECTION g_criSec;
     21 
     22 void ThreadFunc1(int id)
     23 {//原子操作 220ms
     24     for (int i = 0; i < SIZE; i++)
     25     {
     26         ++g_seq1;
     27     }
     28 }
     29 
     30 void ThreadFunc2(int id)
     31 {//atomic_flag 
     32     for (int i = 0; i < SIZE; i++)
     33     {
     34         while (af.test_and_set()) {}
     35         ++g_seq2;
     36         af.clear();
     37     }
     38 }
     39 
     40 void ThreadFunc3(int id)
     41 {//mutex 260
     42     for (int i = 0; i < SIZE; i++)
     43     {
     44         mtx.lock();
     45         ++g_seq3;
     46         mtx.unlock();
     47     }
     48 }
     49 
     50 void ThreadFunc4(int id)
     51 {//CriticalSection 
     52     for (int i = 0; i < SIZE; i++)
     53     {
     54         EnterCriticalSection(&g_criSec);
     55         ++g_seq3;
     56         LeaveCriticalSection(&g_criSec);
     57     }
     58 }
     59 
     60 void ThreadTest1();
     61 
     62 void ThreadTest2();
     63 
     64 void ThreadTest3();
     65 
     66 void ThreadTest4();
     67 
     68 
     69 int main()
     70 {
     71     InitializeCriticalSection(&g_criSec);
     72 
     73     ThreadTest1();
     74 
     75     ThreadTest2();
     76 
     77     ThreadTest3();
     78 
     79     ThreadTest4();
     80 
     81     std::cout << std::endl;
     82     system("pause");
     83 }
     84 
     85 /* Output:
     86 
     87 ThreadTest1
     88 duration=213
     89 g_seq1=10000000
     90 
     91 ThreadTest2
     92 duration=5164
     93 g_seq2=10000000
     94 
     95 ThreadTest3
     96 duration=254
     97 g_seq3=10000000
     98 
     99 ThreadTest4
    100 duration=2379
    101 g_seq4=0
    102 
    103 */
    104 
    105 void ThreadTest1()
    106 {
    107     time_t tm_start = clock();
    108     time_t tm_now = 0;
    109     std::vector<std::thread> vec;
    110     for (int i = 0; i < 10; i++)
    111     {
    112         vec.push_back(std::thread(ThreadFunc1, i));
    113     }
    114     for (auto& t : vec)
    115     {
    116         t.join();
    117     }
    118     tm_now = clock();
    119     std::cout << std::endl;
    120     std::cout << __FUNCTION__ << std::endl;
    121     std::cout << "duration=" << tm_now - tm_start << std::endl;
    122     std::cout << "g_seq1=" << g_seq1 << std::endl;
    123 }
    124 
    125 void ThreadTest2()
    126 {
    127     time_t tm_start = clock();
    128     time_t tm_now = 0;
    129     std::vector<std::thread> vec;
    130     for (int i = 0; i < 10; i++)
    131     {
    132         vec.push_back(std::thread(ThreadFunc2, i));
    133     }
    134     for (auto& t : vec)
    135     {
    136         t.join();
    137     }
    138     tm_now = clock();
    139     std::cout << std::endl;
    140     std::cout << __FUNCTION__ << std::endl;
    141     std::cout << "duration=" << tm_now - tm_start << std::endl;
    142     std::cout << "g_seq2=" << g_seq2 << std::endl;
    143 }
    144 
    145 void ThreadTest3()
    146 {
    147     time_t tm_start = clock();
    148     time_t tm_now = 0;
    149     std::vector<std::thread> vec;
    150     for (int i = 0; i < 10; i++)
    151     {
    152         vec.push_back(std::thread(ThreadFunc3, i));
    153     }
    154     for (auto& t : vec)
    155     {
    156         t.join();
    157     }
    158     tm_now = clock();
    159     std::cout << std::endl;
    160     std::cout << __FUNCTION__ << std::endl;
    161     std::cout << "duration=" << tm_now - tm_start << std::endl;
    162     std::cout << "g_seq3=" << g_seq3 << std::endl;
    163 }
    164 
    165 void ThreadTest4()
    166 {
    167     time_t tm_start = clock();
    168     time_t tm_now = 0;
    169     std::vector<std::thread> vec;
    170     for (int i = 0; i < 10; i++)
    171     {
    172         vec.push_back(std::thread(ThreadFunc4, i));
    173     }
    174     for (auto& t : vec)
    175     {
    176         t.join();
    177     }
    178     tm_now = clock();
    179     std::cout << std::endl;
    180     std::cout << __FUNCTION__ << std::endl;
    181     std::cout << "duration=" << tm_now - tm_start << std::endl;
    182     std::cout << "g_seq4=" << g_seq4 << std::endl;
    183 }
  • 相关阅读:
    pandas
    CTC Loss原理
    CTC 的工作原理
    Demystifying JavaScript Closures, Callbacks and IIFEs
    Css compatibility
    Flexbox——快速布局神器
    centos wordpress
    Encog
    D3js
    Lucene学习
  • 原文地址:https://www.cnblogs.com/endenvor/p/13409766.html
Copyright © 2011-2022 走看看