这应该是一个简单的问题,但我很难找到答案。
如果我在堆上有多个 std::vector,每个只能由一个线程访问,那么它们是线程安全的吗?也就是说,因为向量将专用于特定线程,所以我只关心向量调整自身大小时的内存访问冲突,而不关心并发访问、数据竞争等。
当然,我可以将每个向量粘贴在其线程的堆栈上,但它们将非常大,可能会导致我的应用程序中的堆栈溢出。
谢谢!
我知道 std::atomic 应该具有明确定义的行为,但我找不到这个问题的易于理解的在线答案:Do std::atomic.load() 和 .store() 有执行保证吗?
如果两个线程尝试对同一个 std::atomic 对象进行并发写入或读取,是否保证写入和读取都被执行?换句话说,写入或读取任务是否有可能根本无法完成?其中之一或两者会被阻止吗?或者它们保证是连续的?我不是在这里询问操作顺序。我只是简单地询问手术是否会在未来某个未指定的时间进行。