近日項目需要用到多線程,由于之前沒有寫過c++代碼,經(jīng)過研究,發(fā)現(xiàn)c++11引入了一個多線程類,就寫了一個簡單的例子,做個簡單記錄。 –2018年的今天很冷,全球股市暴跌。 簡單多線程例子: detch()啟動線程: #include <thread> #include <Windows.h> using namespace std; void TestThread1(); void TestThread2(); int main(){ thread t1(TestThread1); t1.detach(); thread t2(TestThread2); t2.detach(); printf("主線程:你好帥!?。?!\n"); system("pause"); } void TestThread1(){ for (int i = 0; i < 10; i++){ printf("TestThread1:%d\n", i); Sleep(100); } } void TestThread2(){ for (int i = 100; i < 110; i++){ printf("TestThread2:%d\n", i); Sleep(100); } } 說明:detch()方法的意思就是開啟子線程,并且主線程不等待子線程運行完畢,而是和子線程并行運行。 ***************************************************************************** join()方法啟動線程: #include <thread> #include <Windows.h> using namespace std; void TestThread1(); void TestThread2(); int main(){ thread t1(TestThread1); t1.join(); thread t2(TestThread2); t2.join(); printf("主線程:你好帥?。。?!\n"); system("pause"); } void TestThread1(){ for (int i = 0; i < 10; i++){ printf("TestThread1:%d\n", i); Sleep(100); } } void TestThread2(){ for (int i = 100; i < 110; i++){ printf("TestThread2:%d\n", i); Sleep(100); } } 說明:join()方法的意思就是開啟子線程,線程會按照開啟的先后順序同步運行。 *********************************************************************************** 子線程函數(shù)帶有參數(shù)的多線程: #include <thread> #include <Windows.h> using namespace std; void TestThread1(int count); void TestThread2(int start ,int count); int main(){ thread t1(TestThread1,10); t1.detach(); thread t2(TestThread2,40,50); t2.detach(); printf("主線程:你好帥?。。。n"); system("pause"); } void TestThread1(int count){ for (int i = 0; i < count; i++){ printf("TestThread1:%d\n", i); Sleep(100); } } void TestThread2(int start,int count){ for (int i = start; i < count; i++){ printf("TestThread2:%d\n", i); Sleep(100); } } ***************************************************************************** 多線程安全訪問共享數(shù)據(jù)例子(賣票) ThreadTest.h頭文件 #ifndef _THREAD_TEST_H_ #define _THREAD_TEST_H_ #include <stdio.h> #include <thread> #include <mutex> #include <Windows.h> using namespace std; class ThreadTest { public: //賣票線程1 void ThreadTest::Thread1(); //賣票線程2 void ThreadTest::Thread2(); ThreadTest(); ~ThreadTest(); private: //票的剩余數(shù)目 int Sum; mutex Mutex;//線程鎖 }; #endif // !_THREAD_TEST_H_ ThreadTest.cpp 文件 #include "ThreadTest.h" using namespace std; void ThreadTest::Thread1(){ for (;;){ Mutex.lock();//加鎖 Sleep(10); --Sum; if (Sum < 0){ printf("Thrad1——票賣完了\n", Sum); break; } printf("Thrad1——剩余票數(shù):%d\n", Sum); Mutex.unlock();//解鎖 } Mutex.unlock();//解鎖 } void ThreadTest::Thread2(){ for (;;){ Mutex.lock();//加鎖 Sleep(10); --Sum; if (Sum < 0){ printf("Thrad2——票賣完了\n"); break; } printf("Thrad2——剩余票數(shù):%d\n", Sum); Mutex.unlock();//解鎖 } Mutex.unlock();//解鎖 } //構(gòu)造函數(shù) ThreadTest::ThreadTest() { Sum = 50; thread t1(&ThreadTest::Thread1,this); t1.detach(); thread t2(&ThreadTest::Thread2,this); t2.detach(); } //析構(gòu)函數(shù) ThreadTest::~ThreadTest() { } mian函數(shù) #include "ThreadTest.h" int main(){ //多線程賣票類 ThreadTest SaleThread; while (true){ //為了截圖方便--加入死循環(huán) } }
說明:對于線程鎖的使用可參考博客c++11線程鎖的使用 希望對您有所幫助! --------------------- 作者:GeeK_1024Wei 來源:CSDN 原文:https://blog.csdn.net/qq_22494029/article/details/79273127 版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接! |
|