如何使signalObjectAndWait成为一个原子操作

时间:2014-03-23 08:44:02

标签: c++ multithreading scheduled-tasks

我构建了一个调度程序系统,用于在多个线程之间调度任务。

我有一个线程来处理队列顶部的调度操作和将在系统上执行的作业线程。

作业线程将自己输入队列并发信号通知调度程序线程开始其操作,但是在作业线程有机会输入等待信号之前,调度程序线程开始工作并向原始作业线程发送事件信号,不幸的是,只有那时工作进入等待操作而不是工作。

我的意图是什么:

@作业信号到调度程序线程并进入等待模式

@ Scheduler开始工作并发出工作线程信号

@ job thread开始工作

相反,实际发生了什么:

@作业向调度程序线程发出信号

@ Scheduler开始工作并发出工作线程信号

@ job thread进入等待状态

我尝试使用“signalObjectAndWait”命令,但根据MSDN:

  

请注意,“信号”和“等待”不能保证作为原子操作执行。在调用SignalObjectAndWait的线程开始等待第二个对象之前,在其他处理器上执行的线程可以观察到第一个对象的信号状态。

有没有办法让受让人认为信号和等待操作是原子的?

0 个答案:

没有答案