要看看你的函数干什么用了。
如果你的函数你操作了全局变量或其他线城间共享的东西,那么冲突是会有的。
如果你的函数没有涉及到这些东西,那么请放心,no problem!
线程有各自的栈,临时变量不会冲突的。

解决方案 »

  1.   

    to zzh:
       您的高论不敢苟同.函数确实是一块固定的内存区域,确切说他就是代码段的一部分。不过这与线程何干,请记住运行时代码是不可更改的。多线程同时调用某一函数不一定会有问题。
    For Example:
    int Total(int n1, int n2)
    {
        int ln1;
        int ln2;
        int total;    ln1 = n1;
        ln2 = n2;
        total = n1 + n2;    return toal;
    }thread1 code:
    ...
    int n = total(1, 2);
    ...thread2 code:
    ...
    int n = total(3, 4);
    ...这样的代码难道会产生冲突吗?永远不会!
    所谓的冲突一般发生在不同的线程存取线程间共享数据的时候。For example:int ntotal;
    int Total(int n1, int n2)
    {
        int ln1;
        int ln2;    ln1 = n1;
        ln2 = n2;
        ntotal = n1 + n2;    return ntotal;
    }thread1 code:
    ...
    int n = total(1, 2);
    ...thread2 code:
    ...
    int n = total(3, 4);
    ...这种情况下才可能发生冲突:ntotal的值可能因为两个或两个以上线程同时运行而导致不确定的结果。所以要判断一个函数是否会发生冲突还要看他到底干了些什么。想象一下windows的共享库吧!windows难以计数的线程都在调用windows api,要是按zzh同志所说的那样,那岂不是每个函数都要"使用临界区来控制冲突"了?再看看MFC中诸如CWnd::FromHandle,CTime::GetCurrentTime这样的静态函数,看看它的原码有没有临界区?每个线程被创建的时候内核都会给他一个自己的栈,所以栈内数据是不会有共享冲突的,而堆上的数据才可能因多线程存取而导致糟糕的结果!建议找本关于操作系统的书籍看一看
      

  2.   

    同意wjf的高论,我想补充一点,类的静态成员函数和普通成员函数的关键区别是,静态函数没有隐含的this指针参数,因此无法直接访问普通类成员,当然也无需通过类实例来调用。
    好像有点乱,wjf看来脑筋比我清楚,欢迎来整理一下。