int g_var = 1;
int f()
{
g_var = g_var + 2;
return g_var;
}
int g()
{
return f() + 2;
}
维基上是这么说的:
以上代码中,f
使用了全局变量 g_var,所以,如果两个线程同时执行它并访问g_var
,则返回的结果取决于执行的时间。因此,f
不可重入。而g
调用了f
,所以它也不可重入。
但是,维基上又说:与多线程并发执行的线程安全不同,可重入强调对单个线程执行时重新进入同一个子程序仍然是安全的。
按这样说的话,那“如果两个线程同时执行它并访问g_var
,则返回的结果取决于执行的时间。”这句话想表示的应该是 f 和 g 两个函数不是线程安全的啊,因为它说的是两个线程啊,可重入不可重入不是针对一个线程而言的吗?为什么说这两个函数是不可重入的呢?
它的意思应该是如果这两个函数在不同的线程中,这两个函数是不可重入的。
前提是,函数在不同的线程中
多线程的时候要加锁。