gpt4 book ai didi

c++ - 如何在 WinAPI 中创建一对多等待机制

转载 作者:太空狗 更新时间:2023-10-29 21:06:42 24 4
gpt4 key购买 nike

我有一个将数据放入缓冲区的线程和多个将从缓冲区读取数据的线程。

如何创建同步机制来满足这些要求:

  1. 写入线程将所有数据写入缓冲区并让所有读取线程同时运行(好吧,我用信号量做到了)。然后等待所有人完成他们的回合。我无法使用 WaitForMultipleObjects,因为线程没有终止,而是一轮循环正在结束。也许每个读取器线程都有一个事件,当循环结束时,它们会发出信号,而写入器将使用 WaitForMultipleObjects 来等待所有线程完成它们的循环?
  2. Reader 线程读取它们的数据,完成该轮的工作,并以某种方式让 Writer 线程放置下一个数据。请注意,Writer 应该在所有线程完成轮到它们时开始它的下一轮循环。

如何实现这样的机制?正如我所说,我唯一能想到的似乎是:

作者:

for (;;) 
{
PutDataIntoBuffer();
for (i = 0; i < threadCount; ++i)
{
ResetEvent(threadEvents[i]); //so that all events will be nonsignaled
}
ReleaseSemaphore(sem, threadCount, NULL);
WaitForMultipleObjects(threadCount, threadEvents, TRUE, INFINITE);
}

读者:

for (;;)
{
WaitForSingleObject(sem, INFINITE);
DoWhateverToBeDoneWithData();
SetEvent(threadEvents[myThreadIndex]); //writer, wait for me too!
}

执行此操作的更好方法是什么?

最佳答案

你应该使用 Readers-writer lock .

在 Windows 中有一个 Slim Reader/Writer lock我建议您看一看。

关于c++ - 如何在 WinAPI 中创建一对多等待机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com