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 }

 

posted @ 2020-07-31 15:05  黑马网仔  阅读(236)  评论(0编辑  收藏  举报