近日項目需要用到多線程,由于之前沒有寫過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)載請附上博文鏈接!