C++11 Multithreading - Create Threads

Constructor

C++11 提供了std::thread,std::thread thread_object(callable),callable可以是

1. A function pointer

2. A function object

3. A lambda expression

To Pass arguments to thread’s associated callable object or function just pass additional arguments to the std::thread constructor.
By default all arguments are copied into the internal storage of new thread.

#include <iostream>
#include <thread>
using namespace std; 

// A dummy function
void foo(int x) {
    for (int i = 0; i < x; i++) {
        cout << "Thread using function pointer as callable\n";
    }
} 

// A callable object
class thread_obj {
public:
    void operator()(int x) {
        for (int i = 0; i < x; i++)
            cout << "Thread using function object as callable\n";
    }
}; 

int main()
{
    cout << "Threads 1 and 2 and 3 operating independently" << endl; 

    // This thread is launched by using function pointer as callable
    thread th1(foo, 3); 

    // This thread is launched by using function object as callable
    thread th2(thread_obj(), 3); 

    // Define a Lambda Expression
    auto f = [](int x) {
        for (int i = 0; i < x; i++)
            cout << "Thread using lambda expression as callable\n";
    };
    // This thread is launched by using lamda expression as callable
    thread th3(f, 3); 

    // Wait for the threads to finish
    // Wait for thread t1 to finish
    th1.join();
    // Wait for thread t2 to finish
    th2.join();
    // Wait for thread t3 to finish
    th3.join();
    return 0;
} 

thread::join()

Once a thread is started then another thread can wait for this new thread to finish. For this another need need to call join() function on the std::thread object.

Example:

Suppose Main Thread has to start 10 Worker Threads and after starting all these threads, main function will wait for them to finish. After joining all the threads main function will continue.

Reference

https://www.geeksforgeeks.org/multithreading-in-cpp/

https://thispointer.com//c-11-multithreading-part-1-three-different-ways-to-create-threads/

https://thispointer.com/c11-multithreading-part-2-joining-and-detaching-threads/

https://thispointer.com/c11-multithreading-part-3-carefully-pass-arguments-to-threads/

原文地址:https://www.cnblogs.com/hankunyan/p/11669212.html

时间: 2024-10-11 11:23:27

C++11 Multithreading - Create Threads的相关文章

mysql can&#39;t create threads in threadpool

最近,我们在券商端的mysql运行一段时间后,发生mysql can't create threads in threadpool,如下所示: 据官网一个报告显示,目测是一个bug,内存紧张导致,那天也没及时看,明后天再观察看看,现在是没有问题了. mysql can't create threads in threadpool

Python Socket,How to Create Socket Server? - 网络编程实例

文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programing in Python: Part2: Programing sockets servers. 在所有的通信实例中,都分为Client 和Server. 其中:Client是请求的发起点,Server是使用Socket接收传入的值并且提供返回数据. Server的职能如下: 1>.创建/打开一个so

c++11线程

原文: http://www.codeproject.com/Articles/598695/Cplusplus11-threads-locks-and-condition-variables C++11 threads, locks and condition variablesC++11 线程,锁和条件变量 This article is a walk-through the C++11 support for threads and synchronization mechanisms (

[安卓] 11、串口蓝牙&#183;将软硬结合进行到底

前言 上次我详细介绍了如何用笔记本搜索到蓝牙模块并与之通信:http://www.cnblogs.com/zjutlitao/p/3886826.html,这次将介绍如何让安卓手机的蓝牙和该蓝牙模块进行通信. 简单一步搞定 参看:[只需简单一步,android自带的示例程序 BluetoothChat 变蓝牙串口助手 :http://www.amobbs.com/thread-5426293-1-1.html],只要把Android自带的BluetoothChat例程稍微改一下就能搞定: Blu

SQL Server安全(10/11):行级别安全(Row-Level Security)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 不像其它一些工业强度的数据库服务器.SQL Server对于单个数据记录,缺少内建机制,称作行级别安全(Row-Level Security).这篇文章会探寻为什么你可能想使用这样的行级别颗粒的数据访问安全和你如何能

SQL Server安全(5/11):架构与安全(Schemas and Security)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 架构本质上是另一个数据库对象,对于其它对象的容器,让在复杂的数据库里管理对象组更加容易.但架构也有重要的安全功能.在这篇文章里你会学到你如何给主体访问一组对象,通过在架构上分配许可,而不是各个表.代码模块(存储过程)

多线程(Multi-Threading)

Creating threads in Java Two things to do to create threads in java: (1) Create a task (object) //Creating a task public class TaskClass implements Runnable { public TaskClass() { ... } //Implement the run method in Runnable void run() { //things to

Vue Create 创建一个新项目 命令行创建和视图创建

开始之前 你可以先 >>:cd desktop[将安装目录切换到桌面] >>:vue -V :Vue CLI 3.0.0-rc.11 >>:vue create yanxiatingyu :xxxxx一段英文 >>:y >>:cd yanxiatingyu >>:npm run serve 浏览器输入:http://localhost:8080/ 假如浏览器能够打开,没有出现页面 可能你的端口被占用了. C:\Users\ruby&g

Linux线程学习

线程基础 进程 系统中程序执行和资源分配的基本单位 每个进程有自己的数据段.代码段和堆栈段 在进行切换时需要有比较复杂的上下文切换 线程 减少处理机的空转时间,支持多处理器以及减少上下文切换开销, 比创建进程小很多 进程内独立的一条运行路线 处理器调度的最小单元,也称为轻量级进程 可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享 线程相关的执行状态和存储变量放在线程控制表内 一个进程可以有多个线程,有多个线程控制表及堆栈寄存器,共享一个用户地址空间 多线程同步问题 线程共享进程的