
展开全部

写入多线程应用程鞋线程间的同步资源访问是一耕问题。两膏柑同时访问同一数据会导致不合需要的、不可预知的结果。例如,一柑可能正在升级结构的内容,而另一柑正在读取同一结构的内容。无法获知读取线程将要收到何种数据:旧数据、新写入的数据恢数据都有。MFC提供了多附和同步访问类以帮助解臼题。本值蒙用的类及其如何在典型的多线程应用程泄用它们建立线程安全类。典型的多线程应用程行代表高程间应共享的资源的类。正确设计的完全线程安全类不需要滴何同步函数。该类的任何事情都在外部处理,使您可以将精力集中于怎样更好地使用类,而不是它怎样会耍创建完全线程安全类的有效技诗同步类合并至资源类中。将同步类合并至共享类是一弗的过程。以维护链接的账号列表的应用程旋。此应用程许在独立的窗口中最多检查三抚,但是在任何特定的时间,只能更新一抚。更新帐户酣过网络将升级的数据发送至数据存档。此例子应用程忻所有这三种类别的同步类。尹一次最多允许检查三抚,所以它使用CSemaphore限制对三讣对厦问。当企图查看第四抚时,应用程羞等到前三岗中有一刚,幻尝试失败。更新帐户时,应用程忻CCriticalSection确保一次只更新一抚。更新成功孩撑CEvent以传递等待该事件信号发送的线程。

此线程将新数据发送到数据存档。设计线程安全类裙类完全线程安全,首先将适度的同步类据成员添加至共享类中。在上面的帐户管理示例中,将CSemaphore数据成员添加至视图类,将CCriticalSection数据成员添加至链接的列表类,将CEvent数据成员添加至数据存储类。下一步,将同步淀加到修改类中的数据皇受控资源的所有成员变量中。应该在每庚中创建CSingleLock籰tiLock对息得对蟧ck函数。当锁定对惜并被销毁时,该对席数祅lock以释放资源。当然,如果乐意,可直接祅lock。用这些方法设计线程安全类使得在多线程应用程泄用该类与使用非线程安全类一样容易,但仍带有更高的安全级鲍同步对犀步访问权对习到资源的类将提供完全线程安全编程的所有特点,而不会有维护同步代码的特点。下面的代码实例通过使用在共享资源类和CSingleLock对嚣谬据成员m_CritSection(CCriticalSection类型)ccriticalsection 使用,对此原则进行了说猫过使用m_CritSection对县址创建CSingleLock对洗试图同步共享资源(从CWinThread派生)。试图锁定资源,一旦锁定,即完成了共享对夏工钻成工赚即祅lock取消锁定资源。

CSingleLocksingleLock(&m_CritSection);singleLock.Lock();//resourcelocked//.usageofsharedresourcesingleLock.Unlock();注意与其它MFC同步类不同的是,CCriticalSection没有计时锁定请穷。等待释放线程的时间是无限的。此方式的特点是类已经比没有添加同步对相似类慢一些。而且,如果有一赶的线程可能删除对舷并原则不必定依然有效。在这些情楷最好维持单独同步对闲关确定在不同情抗用什么同步类的信息ccriticalsection 使用,请参看多线程编程:何时使用同步类。有关同步的信息,请参看“PlatformSDK”中的同步。有关MFC中的多线程支持的信息,请参见使用C++和MFC进行多线程编程。请参见概念使用C++和MFC进行多线程编程
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-135361-1.html
去追求就是最好的
打完了把它拖到12海里以内来
对自己的定位也很明确