现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

多线程编程总结

2013-07-27 23:59 工业·编程 ⁄ 共 722字 ⁄ 字号 暂无评论

一、四种同步方法

互斥量、临界段、事件、信号量

二、同步的原因

我们之所以在线程之间进行同步,是因为:

1、由于线程间竞争共享资源。

2、为完成某个任务而需要协作。

总的来说就是因为竞争和协作。

三、Win32 API——API函数——MFC封装

CSyncObject同步对象:CEvent、CSemaphore、CMutex、CCriticalSetion

同步访问对象:CMultiLock、CSingleLock

四、异同

1、互斥量、事件、信号量:内核对象,可用于进程之间同步

临界段:只能用于进程内的线程同步

互斥量和临界段:功能类似,但从性能上讲,临界段由于互斥量。

2、事件的不同是:不保护共享资源。而是用于等待某个事件,在特定的事件时发送信号。

它主要是协调线程间的动作

3、信号量的不同是:允许一个以上的线程同时访问共享资源。

它主要是用于资源计算。

五、选择

1、访问共享资源前,判断是否要等待某事件发生。若是,使用事件进行同步。

2、一个应用程序是否可多个线程同时访问共享资源。若是,使用信号量进行计数。

3、是否有多个进程使用共享资源。若是,使用互斥量。

4、若以上都不满足,使用临界段。

六、死锁问题

1、死锁例子:

假设有线程A、B,它们必须同时获得资源1、2才能继续执行。

在某一时刻,A获得1,B获得2。此时A需要再获得2才能继续执行,而B需要再获得1才能继续执行。

但1被A占有,2被B占有,两者互相阻塞,于是出现两个线程无休止等待的死锁状态。

2、死锁,就是指两个或多个线程出现永久性阻塞的状态。

3、一旦发生,则后果十分严重。再加上死锁的分析检测都很困难,不是每次运行都会发生。

所以我们在编程过程中,通过分析各种情况来发现和消除死锁,至关重要。

【专题:多线程编程

给我留言

留言无头像?