python线程和c++线程的区别_多线程(C++/Python)

多线程(C++/Python)本文包括一下内容:通过C++11的标准库进行多线程编程,包括线程的创建/退出,线程管理,线程之间的通信和资源管理,以及最常见的互斥锁,另外对python下多线程的实现进行讨论。[TOC]前言线程管理初步1. 线程函数2. 线程启动3. 线程结束/退出4. 线程传参5. 互斥锁Python中的多线程1. 线程中的参数访问ThreadLocal2. Python中的锁机制...
摘要由CSDN通过智能技术生成

多线程(C++/Python)

本文包括一下内容:

通过C++11的标准库进行多线程编程,包括线程的创建/退出,线程管理,线程之间的通信和资源管理,以及最常见的互斥锁,另外对python下多线程的实现进行讨论。

[TOC]前言

线程管理初步1. 线程函数

2. 线程启动

3. 线程结束/退出

4. 线程传参

5. 互斥锁

Python中的多线程1. 线程中的参数访问ThreadLocal

2. Python中的锁机制Threading.Lock()

前言

多线程模型共享同一进程资源,通过多线程可以极大的提高代码的效率,完成单一线程无法完成的任务。

几个需要记住的点: C++中的线程是一个类,因此可以像操作类一样进行操作; C++中的线程也是一类资源;

sample

#include #include

void Thread_1() {

std::cout << "This is Thread_1." << std::endl;

return;

}

int main() {

std::thread t{greeting}; // 列表初始化 t.join();

return 0;

}

以上是多线程下的HelloWorld!,从上我们可以看出C++多线程编程的基本步骤:

创建线程函数 -> 实例一个线程 -> 运行

两个注意点

1. 编译 我们使用了C++11的特性以及线程库pthread,因此在编译的时候这两个都要说明:

g++ --std=c++11 -pthread main.cpp

2.线程初始化 从 C++ 11 开始,推荐使用列表初始化{}的方式,构造类类型的变量。

线程管理初步

包括线程函数,启动线程,结束线程,线程传参

1. 线程函数

任何事情都有个开始,线程函数就是新线程的开始入口。 线程函数必须是callable和无返回值的。

普通函数 例如上面例子中的简单形式void func(void *params);

可调用类型的实例

class ThreadTask {

private:

size_t count_ = 0;

public:

explicit ThreadTask (size_t count) : count_(count) {}

void operator()() const { // 定义callable do_something(this->count_);

}

};

ThreadTask task{42}; // 初始化可调用类型的实例std::thread wk_thread{task}; // 创建并初始化和运行新线程 // 列表初始化

注意: 虽然callable的实例看起来和函数用法一样,但是其本质上仍然是一个类的对象,因此在传入线程进行初始化时,其会被拷贝到线程空间,因此callable的类在这里必须做好完善的拷贝控制(参拷贝构造函数)

2. 线程启动

线程随着thread类型实例的创建而创建,因此线程就变成了如同实例一样的资源,由C++提供统一的接口进行管理。

创建线程的三种不同的方式:

(1)最简单最常见的方式

void thread_1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值