我试图在标题中解释这一切:我有一个多线程C程序,它将有多个窗口调用一个窗口过程。
在窗口过程中完成了一些处理。 我是否需要保护它,还是每次调用窗口过程都会在内存中分离?
我的直觉是我不需要互斥锁,因为它们都是局部变量,这是错的吗?
LRESULT APIENTRY EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_GETDLGCODE)
return DLGC_WANTALLKEYS;
else if(uMsg == WM_CHAR)
{
if( (int) wParam == 13)
{
char* strCurrentCommand;
unsigned long ulThisConversation = GetConversation(0, 0, hwnd, 0, 0);
...
我关注的是局部变量strCurrentCommand和ulThisConversation。
函数的局部变量和参数在堆栈上。 每个线程都有自己的堆栈,函数的每次调用都会在运行它的线程堆栈上为其参数和局部变量获取一个空间。 所以你很好。
您不需要使用互斥锁保护堆栈变量。
无需保护局部变量,因为每次调用窗口 proc 函数都会在堆栈上分配新副本。
但请记住,为了避免需要互斥锁或其他同步机制,您还需要确保从窗口 proc 函数内部调用的任何函数(如 GetConversation
和此函数调用的任何函数)都是线程安全的。