【发布时间】:2009-11-05 12:59:21
【问题描述】:
在 Windows 平台的 C++ 中,我想以原子方式执行一组函数调用,以便执行不会切换到我进程中的其他线程。我该怎么做呢?有什么想法、提示吗?
编辑:我有一段代码:
someObject->Restart();
WaitForSingleObject(handle, INFINITE);
现在 Restart() 函数以异步方式完成其工作,因此它会快速返回,并且当某个对象重新启动时,它会从另一个线程向我发送一个事件,在该线程中我会发出我正在处理的事件句柄的信号等待并因此继续处理。但是现在的问题是,在代码到达 WaitForSingleObject() 部分之前,我收到了重新启动完成事件并发出了该事件的信号,之后 WaitForSingleObject() 就再也没有返回了不再发出信号。这就是为什么我想将 Restart() 和 WaitForSingleObject() 作为原子执行。
【问题讨论】:
-
问题是:你为什么要这么做?如果您试图通过禁止内核切换线程来“同步”对数据结构的访问,那么您的处理方式非常错误。所以请解释你为什么要这样做。
-
即使你能做到这一点,它也会在一个会同时执行多个线程的多核系统上中断
-
你的手柄信号如何?
PulseEvent()或SetEvent()? -
我用 SetEvent() 发出信号
标签: c++ windows multithreading