首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

线程同步应该在函数内还是外?解决办法

2012-04-13 
线程同步应该在函数内还是外?例如我有2个线程,都会用到一个数据操作函数:void Add(int nData)假如我用临

线程同步应该在函数内还是外?
例如我有2个线程,都会用到一个数据操作函数:
void Add(int nData);
假如我用临界值的话,应该用下面的那种才是正确的?
第一种:
UINT WorkThread(LPVOID lpVoid)
{
EnterCriticalSection(&cs);
Add(...);
LeaveCriticalSection(&cs);
return 0;
}

第二种:
UINT WorkThread(LPVOID lpVoid)
{
Add(...);
return 0;
}
void Add(int nData)
{
EnterCriticalSection(&cs);
nData++;
LeaveCriticalSection(&cs);
}

[解决办法]
应该都没错,但是你要知道保护的是什么东西,你第一个整个线程都保护了,第二个就保护那个变量
[解决办法]
都可以。如果涉及到数组元素的添加,删除,读取,写入,建议用第一种方法。
[解决办法]

C/C++ code
class CMyLock{public: CMyLock(){ ::InitializeCriticalSection(&m_cs);     } ~CMyLock(){ ::DeleteCriticalSection(&m_cs); }LPCRITICAL_SECTION GetLock(){return &m_cs;}private:     CRITICAL_SECTION m_cs;};class CMyAutoLock{public: CMyAutoLock(CMyLock& lock):m_lock(lock){  EnterCriticalSection(m_lock.GetLock()); } ~CMyAutoLock(){ LeaveCriticalSection(m_lock.GetLock()); }private: CMyLock& m_lock;};
[解决办法]
事实上都没有什么问题,从效率上讲,当然是锁得越少越好.

热点排行