PulseEvent()函数的C实现

PulseEvent()函数的C实现,c,windows,multithreading,events,C,Windows,Multithreading,Events,我需要为手动重置事件编写PulseEvent的C代码实现。因此,此函数必须释放所有等待的线程,然后重置事件。 我只能在windows函数中使用信号量和互斥量(CreateSemaphore、CreateSmutex、ReleaseSemaphore、ReleaseSmutex) 我必须这样做是为了大学考试,所以我没有任何支持信息给你。我猜近似的模拟是让所有线程都进入互斥锁。如果线程带着等待请求进入,则创建一个信号量,将其存储在容器中,退出互斥体并等待该信号量 如果线程通过脉冲请求进入互斥体,则向

我需要为手动重置事件编写PulseEvent的C代码实现。因此,此函数必须释放所有等待的线程,然后重置事件。 我只能在windows函数中使用信号量和互斥量(CreateSemaphore、CreateSmutex、ReleaseSemaphore、ReleaseSmutex)
我必须这样做是为了大学考试,所以我没有任何支持信息给你。

我猜近似的模拟是让所有线程都进入互斥锁。如果线程带着等待请求进入,则创建一个信号量,将其存储在容器中,退出互斥体并等待该信号量

如果线程通过脉冲请求进入互斥体,则向容器中的所有信号量发送信号,清空容器(否,不要关闭处理信号量),然后退出互斥体


发布的线程应该关闭处理它们在继续运行之前等待的信号量。

您应该注意,如果您想准确模拟Windows MRE的功能,您应该知道它已经损坏了。如果设置了MRE并在有多个线程等待时快速重置,则只有那些在重置之前实际运行的线程才会在重置之后运行。任何剩余部分将在MRE上设置回阻塞状态。