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次。

  • 相关阅读:
    转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
    使用智能移动设备访问Ossim制
    POJ 3207 Ikki&#39;s Story IV
    AndroidMainifest标签说明2——&lt;activity&gt;
    POJ1149 PIGS 【最大流量】
    POJ3617 Best Cow Line 馋
    颜色(color)转换为三刺激值(r/g/b)(干股)
    关于SQL中的Update语句
    Java Script 正则表达式的使用示例
    Javascript 知识点简介
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2548465.html
Copyright © 2011-2022 走看看