《C语言实例教程(PDF格式)》第135章


CCountArray便是一个线程安全类。
以下是COUNTARRAY。H,CcountArray的头文件。
#include 〃afxmt。h〃
class CCountArray

private:
int array'10';
CCriticalSection criticalSection;
public:
CCountArray() {};
…………………………………………………………Page 650……………………………………………………………
~CCountArray() {};
void SetArray(int value);
void GetArray(int dstArray'10');
};
在该头文件中包含一个MFC的头文件afxmt。h,以使程序可以使用 
CCriticalSection类。在CCountArray类的声明中,头文件声明了一 
个十个元素的整形数组,这是CCriticalSection类的对象将要保护的 
数据,并且声明了一个CCriticalSection类的对象 
criticalSection。CCountArray类的公共成员函数包含构造和析购函 
数。后面两个成员函数用于访问数据。
下面是CCountArray类的执行文件。注意,在每一个成员函数中, 
CCountArray都在密切关注着CCriticalSection类的对象的状态。这 
也意味这任何调用这些成员函数的线程不必担心线程同步。例如,如 
果线程1调用了SetArray();SetArray()所做的第一件事就是调用 
criticalSection。Lock();这将把criticalSection给线程1,此后可 
以完成一个循环而不用担心被其它线程打断。如果线程2调用了 
SetArray()或GetArray();criticalSection。Lock()语句将挂起线程2 
直到线程1完成循环,执行criticalSection。Unlock()语句将对 
criticalSection的拥有权释放。这时系统唤醒线程2,并将 
criticalSection给它。通过这种方式,所有线程必须安静的等待它 
们访问数据的机会到来。
下面是COUNTARRAY。CPP,CcountArray类的执行文件。
#include 〃stdafx。h〃
#include 〃CountArray。h〃
void CCountArray::SetArray(int value)

criticalSection。Lock();
for (int x=0; x
小说推荐
返回首页返回目录