多次调用相同的threadproc(),没有第一次调用完成

时间:2013-09-11 06:47:23

标签: c windows multithreading winapi windows-7

我有一个threadProc

void* ThreadProc(void* xyz)
{
    //do some work..
}

现在从主线程..我称这个线程,不希望等待它完成

WaitForSingleObject(hThread, 0)

现在我的程序流程已经成功,案件可能会到达那里 第一次调用线程没有完成,第二次调用相同的ThreadProc()。

所以...... 1.操作系统如何处理这种情况?这种程序会产生意想不到的结果吗? 2.如果这是错误的做法,那么正确的方法是什么?

因为最终我希望异步调用一个函数,所以可能同时运行多个实例。

1 个答案:

答案 0 :(得分:2)

每个线程都有一个单独的堆栈,因此只要线程回调函数中的所有变量都是本地的,就没有冲突。但是如果您要访问全局/静态变量,那么它们将在所有线程之间共享,并且需要仔细处理对它们的所有访问。使用互斥/信号量/关键部分。调用库函数也是如此,你不知道它们是线程安全的。

  

这种程序会产生意想不到的结果吗?

这完全取决于线程回调函数的主体。但是,您应该等待WaitForSingleObject(hThread, INFINITE)。现在你等0ms,什么也没做。