gpt4 book ai didi

c++ - 仅使用 get 或 set 的原始类型的线程安全威胁是否被夸大了?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:33 24 4
gpt4 key购买 nike

在过去的一周里,我在工作中一直在争论一个系统,在这个系统上,Cortex-A9 上的 double 是从多个线程获取和设置的,没有线程安全的提示。它似乎工作正常,经过一些测试后,我无法让我的桌面在使用 __int128 的简单测试中失败。读取错误值的几率是否非零?如果可能性很大而我没有做对?

任何在现代 x86_64 机器上反复失败的示例代码都很棒。但仅对基本类型使用 get/set。

最佳答案

尝试运行这个:

#include <iostream>
#include <thread>
#include <array>

std::array<int, 10> sharedArray;
void taskOne()
{
while (true)
{
for (int i = 0; i < sharedArray.size(); ++i)
{
sharedArray[i] = 5;
}

for (int i = 0; i < sharedArray.size(); ++i)
{
if (sharedArray[i] != 5)
{
std::cout << "ERROR";
std::terminate();
}
}
}
}

void taskTwo()
{
while (true)
{
for (int i = 0; i < sharedArray.size(); ++i)
{
sharedArray[i] = 10;
}
}
}

int main()
{
std::thread t1{ taskOne };
std::thread t2{ taskTwo };
t1.join();
t2.join();
}

这打印出 ERROR 并在我的 x86_64 机器上使用 MSVC 在一秒钟内终止。 (在 Ideone machine too 上。)

是的,几率不为零,是的,在多核处理器上几率很大。

关于c++ - 仅使用 get 或 set 的原始类型的线程安全威胁是否被夸大了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com