c++ - 在多线程应用程序中,如果函数不修改/读取数据或修改/读取临时数据,2个以上线程可以访问同一个函数吗?

标签 c++ multithreading function c++11 mutex

我似乎无法在 Google 上找到答案。我基本上想知道两个线程是否可以同时访问此类普通/成员函数并且不会导致未定义的行为,或者我是否必须使用互斥体?

void foo(void)
{
  float x(133.7);
  float y(10);
  std::cout << std::endl << (x * y);
}

void foobar(void)
{
  std::cout << std::endl << 1/1;
}

最佳答案

我很确定您的代码没有未定义的行为。

也就是说,您正在使用共享数据,即 std::cout .

所以如果你期望 std::cout << std::endl << (x * y)要作为单个操作执行(例如,为了防止不同线程的输出位在标准输出上交错),您将必须使用锁。

关于c++ - 在多线程应用程序中,如果函数不修改/读取数据或修改/读取临时数据,2个以上线程可以访问同一个函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502701/

相关文章:

multithreading - epoll/select 用于互斥量/信号量

c++ - 使用先前的函数参数声明新的函数参数是否合法?

node.js - 从另一个 Google Cloud Function 调用 Google Cloud Function 的语法

C:警告: ‘withdrawal_amt’ 可能在此函数中未初始化地使用

c++ - "n"键在Lua表中有什么特殊含义吗?

c++ - 使用 C/C++ Socket 模拟网络条件

c++ - 我是否应该将使用 push_back 的代码更改为使用 std::move?

c++ - 像素着色器中的 Sprite 调色板交换

c++ - 线程池类 : can't pass the args straight

c# - C# 中的简单线程