C++多线程内存何时及如何独立?函数参数是否会被其他线程修改?
解答
你描述的场景不会出现线程互相修改x变量的问题,无需额外做同步处理,具体逻辑如下:
- 示例中函数的形参
x是按值传递的,属于调用线程的栈私有变量。每个线程都有独立的栈空间,调用函数时会在自己的栈上生成专属的x副本,不同线程的x存放在完全隔离的内存地址,根本不属于线程共享的内存范围。 - 进程空间全局共享的规则仅适用于堆内存、全局/静态变量区等公共内存区域,线程栈默认是线程私有资源,其他线程无法直接访问。因此就算其中一个线程处于sleep状态,另一个线程也完全碰不到它的栈上
x变量,最终两个线程都会返回各自输入值+2的结果,不会出现你担心的互相干扰的情况。
如果你的实际业务中确实需要在线程间共享变量,可以使用std::atomic系列原子类型实现无锁同步:C++标准库的原子类型底层基于硬件原子指令实现,不需要加互斥锁就能保证多线程环境下读写、修改操作的线程安全性。
内容的提问来源于stack exchange,提问作者Timangar
相关产品推荐
相关产品推荐

