我有一个threadProc
void* ThreadProc(void* xyz)
{
//do some work..
}
现在从主线程..我称这个线程,不希望等待它完成
WaitForSingleObject(hThread, 0)
现在我的程序流程已经成功,案件可能会到达那里 第一次调用线程没有完成,第二次调用相同的ThreadProc()。
所以...... 1.操作系统如何处理这种情况?这种程序会产生意想不到的结果吗? 2.如果这是错误的做法,那么正确的方法是什么?
因为最终我希望异步调用一个函数,所以可能同时运行多个实例。
答案 0 :(得分:2)
每个线程都有一个单独的堆栈,因此只要线程回调函数中的所有变量都是本地的,就没有冲突。但是如果您要访问全局/静态变量,那么它们将在所有线程之间共享,并且需要仔细处理对它们的所有访问。使用互斥/信号量/关键部分。调用库函数也是如此,你不知道它们是线程安全的。
这种程序会产生意想不到的结果吗?
这完全取决于线程回调函数的主体。但是,您应该等待WaitForSingleObject(hThread, INFINITE)
。现在你等0ms,什么也没做。