当使用 CreateThread() 时,两个线程是否可以使用单个函数“ThreadProc”作为其线程过程?
HANDLE thread1= CreateThread( NULL, //Choose default security
0, //Default stack size
(LPTHREAD_START_ROUTINE)&ThreadProc,
//Routine to execute. I want this routine to be different each time as I want each thread to perform a different functionality.
(LPVOID) &i, //Thread parameter
0, //Immediately run the thread
&dwThreadId //Thread Id
)
HANDLE thread2= CreateThread( NULL, //Choose default security
0, //Default stack size
(LPTHREAD_START_ROUTINE)&ThreadProc,
//Routine to execute. I want this routine to be different each time as I want each thread to perform a different functionality.
(LPVOID) &i, //Thread parameter
0, //Immediately run the thread
&dwThreadId //Thread Id
)
上面的代码是否会创建两个线程,每个线程都具有相同的功能(因为两个线程的线程过程是相同的。)我做得对吗?
如果可能的话,会不会有任何同步问题,因为两个线程都使用相同的线程过程。
请帮我解决这个问题。我真的很困惑,在互联网上找不到任何东西。
最佳答案
可以将同一个函数用作多个线程的线程入口点。
然而,从发布的代码中,i
的地址被传递给两个线程。如果任一线程修改此内存而另一个线程读取,则 i
上存在竞争条件。没有看到 i
的声明,它可能是一个局部变量。这是危险的,因为线程要求 i
在其生命周期内存在。如果 i
没有,线程将有一个悬空指针。动态分配线程参数并让每个线程释放其参数是常见的做法。
关于两个线程可以使用相同的线程过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333381/