Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使signalObjectAndWait执行原子操作_C++_Multithreading_Scheduled Tasks - Fatal编程技术网

C++ 如何使signalObjectAndWait执行原子操作

C++ 如何使signalObjectAndWait执行原子操作,c++,multithreading,scheduled-tasks,C++,Multithreading,Scheduled Tasks,我建立了一个调度系统,在多个线程之间调度任务 我有一个在队列顶部处理调度操作的单线程和一个将在系统上执行的作业线程 作业线程将自己进入队列并向调度程序线程发出开始其操作的信号,但在作业线程有机会输入等待信号之前,调度程序线程开始工作并向原始作业线程发送事件信号,不幸的是,只有在此时作业才进入等待操作而不是工作 我的本意是: @向调度程序线程发送作业信号并进入等待模式 @调度程序开始工作并向作业线程发送信号 @作业线程开始工作 相反,实际发生的情况是: @向调度程序线程发送作业信号 @调度程序开始

我建立了一个调度系统,在多个线程之间调度任务

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

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

我的本意是:

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

@调度程序开始工作并向作业线程发送信号

@作业线程开始工作

相反,实际发生的情况是:

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

@调度程序开始工作并向作业线程发送信号

@作业线程进入等待状态

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

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


有没有办法授权信号等待操作是原子的

是否为Wait对象使用信号量?信号量保持计数状态,因此信号是否发生在等待之前并不重要-它仍将得到正确处理。我没有在wait\signal操作中使用信号量,因此我将无法使用inhibit windows API事件