现在我被卡住了,这就是我想要做的:
- 创建3个线程:
- 这 3 个线程将访问一个共享的全局资源(一个向量)
在函数中的某个点(所有线程都会调用),会有一个 Sleep(time) 函数,它使线程休眠,该函数不返回。这是我想要另一个线程 - 线程 2 访问和使用函数的地方,修改全局变量,直到它休眠,所以线程 3 可以访问函数,等等......
访问全局变量的“临界区”函数具有未指定的访问时间,它永远不会相同。
最初,我主要打电话给
InitializeCriticalSection(&m_stCriticalSection);
我尝试的是,当调用此函数时,我立即调用
EnterCriticalSection(&m_stCriticalSection);
然后我修改全局变量等,然后在我调用的 Sleep(time) 之前
LeaveCriticalSection(&m_stCriticalSection);
问题是,即使我离开了,其他线程也永远无法访问该函数。有没有办法让我的其他线程连续甚至每 5 秒访问关键部分?我的实现会更好吗?
这就是我现在所拥有的
void function() // all our threads will access this
{
EnterCriticalSection(&obj)
// manipulate global data
LeaveCriticalSection(&obj)
Sleep(long time) // another thread SHOULD NOW have access to this section!
return true;
}