1

我有一个threadProc

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

现在从主线程..我调用这个线程并且不想等待它完成

WaitForSingleObject(hThread, 0)

现在我的程序流程是这样的,即第一次调用线程未完成并且第二次调用相同的 ThreadProc() 的情况可能会出现。

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

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

4

1 回答 1

2

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

这样的程序会不会产生意想不到的效果?

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

于 2013-09-11T06:59:06.793 回答