求教,线程同步问题?
struct server_context
{
CRITICAL_SECTION cs;
int running;
};
主线程:
...
struct server_context *sc = (struct server_context *)param;
while(sc-> running)
{
//accept connection and handle.
}
...
工作线程:
...
struct server_context *sc = (struct server_context *)param;
EnterCriticalSection(&sc-> cs);
sc-> running = 0;
LeaveCriticalSection(&sc-> cs);
...
运行工作线程后,主线程并没有因为sc-> runnning = 0而退出循环,请教各位大侠,是何缘由。
[解决办法]
因为变量被线程缓存了,这是优化得结果,你把这个定义变量前面加volatile修饰即可
volatile bool bRunning;
[解决办法]
来晚了。其实也可以用EVENT来通知。
[解决办法]
volatile int running
[解决办法]
加volatile修饰。楼上很多人提到了。
[解决办法]
加volatile修饰.