zoukankan      html  css  js  c++  java
  • MSDN上的Mutex代码及其执行结果

    MSDN上的Mutex代码及其执行结果

    #include <windows.h>
    #include <stdio.h>
    
    #define THREADCOUNT 2
    
    HANDLE ghMutex; 
    
    DWORD WINAPI WriteToDatabase( LPVOID );
    
    int main( void )
    {
        HANDLE aThread[THREADCOUNT];
        DWORD ThreadID;
        int i;
    
        // Create a mutex with no initial owner
    
        ghMutex = CreateMutex( 
            NULL,              // default security attributes
            FALSE,             // initially not owned
            NULL);             // unnamed mutex
    
        if (ghMutex == NULL) 
        {
            printf("CreateMutex error: %d\n", GetLastError());
            return 1;
        }
    
        // Create worker threads
    
        for( i=0; i < THREADCOUNT; i++ )
        {
            aThread[i] = CreateThread( 
                         NULL,       // default security attributes
                         0,          // default stack size
                         (LPTHREAD_START_ROUTINE) WriteToDatabase, 
                         NULL,       // no thread function arguments
                         0,          // default creation flags
                         &ThreadID); // receive thread identifier
    
            if( aThread[i] == NULL )
            {
                printf("CreateThread error: %d\n", GetLastError());
                return 1;
            }
        }
    
        // Wait for all threads to terminate
    
        WaitForMultipleObjects(THREADCOUNT, aThread, TRUE, INFINITE);
    
        // Close thread and mutex handles
    
        for( i=0; i < THREADCOUNT; i++ )
            CloseHandle(aThread[i]);
    
        CloseHandle(ghMutex);
    
        return 0;
    }
    
    DWORD WINAPI WriteToDatabase( LPVOID lpParam )
    { 
        // lpParam not used in this example
        UNREFERENCED_PARAMETER(lpParam);
    
        DWORD dwCount=0, dwWaitResult; 
    
        // Request ownership of mutex.
    
        while( dwCount < 20 )
        { 
            dwWaitResult = WaitForSingleObject( 
                ghMutex,    // handle to mutex
                INFINITE);  // no time-out interval
     
            switch (dwWaitResult) 
            {
                // The thread got ownership of the mutex
                case WAIT_OBJECT_0: 
                    __try { 
                        // TODO: Write to the database
                        printf("Thread %d writing to database...\n", 
                                GetCurrentThreadId());
                        dwCount++;
                    } 
    
                    __finally { 
                        // Release ownership of the mutex object
                        if (! ReleaseMutex(ghMutex)) 
                        { 
                            // Handle error.
                        } 
                    } 
                    break; 
    
                // The thread got ownership of an abandoned mutex
                // The database is in an indeterminate state
                case WAIT_ABANDONED: 
                    return FALSE; 
            }
        }
        return TRUE; 
    }

    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 736 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    Thread 2504 writing to database...
    请按任意键继续. . .

    dwCount 为 20,每个线程执行20次。

  • 相关阅读:
    PHP-表单提交(form)
    JavaWeb-tomcat安装(Unsupported major.minor version 51.0/startup.bat闪退)
    答疑解惑
    IT路上可能遇到的小需求资源汇总
    批量定时任务将rtf文件转为docx,入参是rtf文件夹,生成一个docx文件夹
    Elastic Search快速入门
    https原理和如何配置https
    开源Futter项目
    如何触发react input change事件
    sqlserver 之 将查询结果变为json字符串
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2548465.html
Copyright © 2011-2022 走看看