C++线程间通讯:数据传递

一、最常规的全局变量方式

  这是我们线程间通讯最常规的办法,因为全局变量的存储位置位于data段,没有存在于函数栈中,程序的其他函数都可以访问。处于这个条件,各个线程函数都可以操作全局变量,达到数据传递的问题。不过由于现代CPU的时间片轮转线程抢占机制,全局变量的操作需要注意同步的问题。

  关于线程同步的问题,锁机制实现了一部分功能,但是由于编译器的优化,还是有可能出现同步问题。我们建议使用volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。(保留url)

二、使用自定义消息

  我们可以在一个线程的执行函数中向另一个线程发送自定义的消息来达到通信的目的。一个线程向另外一个线程发送消息是通过操作系统实现的。利用Windows操作系统的消息驱动机制,当一个线程发出一条消息时,操作系统首先接收到该消息,然后把该消息转发给目标线程,接收消息的线程必须已经建立了消息循环。

转载自:https://blog.csdn.net/yanpingsz/article/details/5891693 侵删


三、

std::promise 可以用来在线程间提供数据传递。

std::future = std::promise.get_future()。

线程中可以对promise赋值std::promise.set_value。

赋值之后std::future.get()就会返回其他线程中设置的值


四、 

std::packaged_task  可以包裹一个函数, 有点类似std::function,不同之处在于这个可以通过get_future返回std::future对象来获取异步执行的函数结果。


转载自:https://www.cnblogs.com/xietianjiao/p/6598931.html 侵删


写在后面的话,由于是第一次写博客,并且属于愚蠢的职场新人,对于文中提到的有错误的地方希望各位大佬及时指正,关于转载方面可能出现的侵权的问题,也请及时指出通知我删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值