是这样的,我在主线程(主程序)有一个定时器,定时器事件里面将全局变量aa加一,主线程开定时开子线程,子线程全局变量aa加一,用临界区实现
enterCriticalSection();
inc(aa);
leaveCriticalSection();请问这样可以实现同步吗?

解决方案 »

  1.   

    可以,临界区是对于一个进程的同步控制,如果两个进程要同步,要用Mutex,你这是一个程序,没有问题。
    initialize
      InitializeCriticalSeciton(cs);var
        cs: TRTLCriticalSection;
    begin
        EnterCriticalSection(cs);
        Inc(aa);
        LeaveCriticalSection(cs);
    end;
      

  2.   

    互斥量(Mutex)可以用于同一进程的不同线程间同步和不同进程间同步,用法:(1)定义互斥量句柄
    var
      m_hMutex: THandle;(2)程序初始化时创建互斥量
      m_hMutex := CreateMutex( nil, FALSE, nil );//如果用于进程间,则最后一个参数不能为nil(3)程序退出时删除互斥量
      CloseHandle( m_hMutex );(4)aa加1的函数
      WaitForSingleObject( m_hMutex, INFINITE );
      Inc( aa );
      ReleaseMutex( m_hMutex );