c++11 thread類簡單使用
阿新 • • 發佈:2019-01-04
近日專案需要用到多執行緒,由於之前沒有寫過c++程式碼,經過研究,發現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()方法的意思就是開啟子執行緒,執行緒會按照開啟的先後順序同步執行。
執行結果:
子執行緒函式帶有引數的多執行緒:
#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);
}
}
執行結果:
多執行緒安全訪問共享資料例子(賣票)
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:
//票的剩餘數目
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——剩餘票數:%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——剩餘票數:%d\n", Sum);
Mutex.unlock();//解鎖
}
Mutex.unlock();//解鎖
}
//建構函式
ThreadTest::ThreadTest()
{
Sum = 50;
thread t1(&ThreadTest::Thread1,this);
t1.detach();
thread t2(&ThreadTest::Thread2,this);
t2.detach();
}
//解構函式
ThreadTest::~ThreadTest()
{
}
mian函式
#include "ThreadTest.h"
int main(){
//多執行緒賣票類
ThreadTest SaleThread;
while (true){
//為了截圖方便--加入死迴圈
}
}
執行結果:
希望對您有所幫助!