2010-06-22

C# 的執行緒同步

用 C++ 寫多執行緒同步程式時常用到的功能有 InterlockedIncrement、CRITICAL_SECTION 和 Semaphore,其對照在 C# 下的使用方式為:

1. InterlockedIncrement

    C++ 的用法如下:
    UINT nCt =0;
    InterlockedIncrement( &nCt );

    C# 的用法如下:
    int nCt =0;
    System.Threading.Interlocked.Increment( ref uCt );

2. CRITICAL_SECTION

    C++ 的用法如下:
    CRITICAL_SECTION g_cs;
    EnterCriticalSection( &g_cs );
    {
        //...
    }
    LeaveCriticalSection( &g_cs );

    C# 的用法如下:
    Object cs = new Object();
    lock (cs)
    {
        //...
    }

3. Semaphore

    C++ 的用法如下:
    HANDLE m_Handle =CreateSemaphore( NULL, 1, 1, L"SemaphoreName" );
    WaitForSingleObject( m_Handle, nWaitTime );
    {
        //...
    }
    ReleaseSemaphore( m_Handle, 1, NULL );
    CloseHandle( m_Handle );

    C# 的用法如下:
    private static AutoResetEvent m_Handle =new AutoResetEvent( true );
    m_Handle.WaitOne();
    {
        //...
    }
    m_Handle.Set();

0 意見 :

張貼留言