CRITICAL_SECTION g_cs;
class CMySafeLock
{
public:
CMySafeLock(CRITICAL_SECTION *p)
{
m_pCS = p;
cout << "----------------lock------------------\n";
EnterCriticalSection(m_pCS);
}
~CMySafeLock()
{
LeaveCriticalSection(m_pCS);
cout << "----------------unlock------------------\n";
}
private:
CRITICAL_SECTION *m_pCS;
};
int g_count = 0;
std::queue<int> g_que;
void thread1()
{
for (int i = 0; i < 2000;i++)
{
CMySafeLock a(&g_cs);
g_count++;
g_que.push(i);
cout << "插入元素:" << i << endl;
Sleep(2);
}
}
void thred2()
{
while (g_count <= 1000)
{
CMySafeLock a(&g_cs);
if (!g_que.empty())
{
cout <<"取出元素:"<< g_que.front() << endl;
g_que.pop();
}
}
}
void main()
{
InitializeCriticalSection(&g_cs);
std::thread t1(thread1);
t1.detach();
std::thread t2(thred2);
t2.detach();
Sleep(20000);
system("pause");
}
结果:


本文介绍了一个使用C++实现的线程同步机制示例,通过定义一个自定义的锁类`CMySafeLock`来保护共享资源的访问。该示例展示了如何利用`CRITICAL_SECTION`进行线程间的互斥操作,确保数据的一致性和完整性。
753

被折叠的 条评论
为什么被折叠?



