C++多线程的使用,返回值和加锁

本文探讨了如何在C++中正确使用多线程,特别是在处理引用类型参数时避免编译错误。通过实例说明了std::ref和std::cref的运用,并介绍了如何结合加锁和同步机制进行并发编程。

使用C++多线程可以进行并行计算,提高执行速率。
在创建thread对象时,要注意如果返回参数是引用类型,如果不使用std::ref前缀,会发生:

Error	C2672	'std::invoke': no matching overloaded function found;
Error	C2893	Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)';

Reference: https://stackoverflow.com/questions/62187098/stdinvoke-no-matching-overloaded-function-found
正确的使用方式:

The arguments to the thread function are moved or copied by value.
If a reference argument needs to be passed to the thread function,
it has to be wrapped (e.g., with std::ref or std::cref).
std::thread my_thread(process_client, std::ref(client));

Example:

#include <thread>

void sum(int a, int b, int &c) {
	c = a + b;
}

int sum1 = 0;
int sum2 = 0;
std::thread fun1(sum, 1, 2, std::ref(sum1));
std::thread fun2(sum, 3, 4, std::ref(sum2));

fun1.join(); // wait for thread return
fun2.join();

当有其他需求如:加锁和同步等,参考:C++多线程详细讲解

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值