簡體   English   中英

在C,多線程,多窗口調用一個窗口過程,每個調用將使用新的局部變量或我需要一個互斥?

[英]In C, multithreaded, multiple windows calling one Window Procedure, will each call use new local variables or do I need a mutex?

我試圖在標題中解釋它:我有一個多線程的C程序,它將有多個窗口調用一個Window Procedure。

在窗口過程中完成了一些處理。 我需要保護它,還是每次調用窗口過程都要在內存中分開?

我的直覺是我不需要互斥鎖,因為它們都是局部變量,這是錯誤的嗎?

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。

函數的局部變量和參數在堆棧中。 每個線程都有自己的堆棧,每次調用函數都會在其運行的線程的堆棧中獲取一個空間,用於其參數和局部變量。 所以你沒事。

您不需要使用互斥鎖保護堆棧變量。

無需保護局部變量,因為每次調用window proc函數都會在堆棧上分配新副本。

但請記住,為了避免使用互斥鎖或其他同步機制,您還需要確保從窗口proc函數內部調用的任何函數(如GetConversation和此函數調用的任何函數)都是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM