多个线程调用相同的函数是否安全?

时间:2010-07-05 05:05:01

标签: c++ c multithreading

举例来说是否安全:

void AddTwo(int &num)
{
  num +=2;
}


void ThreadProc(lpvoid arg)
{
AddTwo((int)arg);

}

如果4个线程同时执行此操作,是否会发生这种情况?感谢

5 个答案:

答案 0 :(得分:23)

该功能本身可以安全地呼叫。如果他们都试图对同一个变量进行操作,就会变得危险。

答案 1 :(得分:2)

从不同的线程调用相同的函数没有错。如果要确保变量一致,建议提供线程同步机制以防止崩溃,竞争条件。

答案 2 :(得分:1)

安全性取决于lpvoid arg的值。

如果所有的参数彼此不同,则安全,否则不安全。

要使函数调用安全,请查看“互斥锁”。

答案 3 :(得分:1)

作为一般经验法则,如果函数不改变任何公共资源(例如相同的内存位置),则该函数是可重入的。如果是,则需要使用某种同步机制,如互斥锁或信号量。

答案 4 :(得分:0)

真正的答案是 - 这取决于......

在大多数平台上,只要你不做其他人提到的功能不安全的事情,它是安全的。这很容易搞砸,所以要小心!

在其他平台上,它绝对是不安全的。例如,由于硬件限制,大多数较小PIC单片机的C编译器无法支持此功能。

一般来说,是的,这是安全的。