例如这样做是否安全?
void AddTwo(int &num)
{
num +=2;
}
void ThreadProc(lpvoid arg)
{
AddTwo((int)arg);
}
如果有4个线程同时进行这个操作,这样做是否安全?谢谢
例如这样做是否安全?
void AddTwo(int &num)
{
num +=2;
}
void ThreadProc(lpvoid arg)
{
AddTwo((int)arg);
}
如果有4个线程同时进行这个操作,这样做是否安全?谢谢
这个函数本身是安全的,但如果它们都试图操作同一个变量,那么就会变得危险。
通常来说,如果一个函数不改变任何共享资源(例如相同的内存位置),它就是可重入的。如果它改变了共享资源,你需要使用某种同步机制,比如互斥锁或信号量。
从不同的线程调用相同的函数并没有问题。如果您想确保变量的一致性,建议提供线程同步机制以防止崩溃和竞态条件。
安全性取决于 lpvoid arg 的值。
如果所有的参数彼此不同,则是安全的,否则就不安全。
为了使函数调用安全,请查看“互斥锁”。
真正的答案是 - 这取决于...
在大多数平台上,只要您在其他人提到的函数中不执行任何不安全的操作,就是安全的。但很容易出错,所以要小心!
在其他平台上,这绝对是不安全的。例如,由于硬件限制,较小的PIC微控制器的大多数C编译器都无法支持此功能。
总的来说,通常情况下是安全的。