【问题标题】:C++ Mutex syntax and usageC++ Mutex 语法和用法
【发布时间】:2012-12-12 00:56:38
【问题描述】:

我一直在对使用 C++ 的多线程解决方案进行大量研究,但由于某种原因,我无法找到任何具体的语法来使用(虽然不使用任何库)我正在将图像渲染到屏幕上并且为每个线程分隔屏幕空间。

我想要发生的是让线程增加一个值并挂起,一旦所有线程都通过它就会将它显示到屏幕上,并释放线程重新开始。

void WaitForThreads(){
    WaitForSingleObject( hCompleteThread, INFINITE );
    IdleThreads++;
    if(IdleThreads==CoreMax){
        //Copy image to screen
        ReleaseMutex( hRelease);
    }
    ReleaseMutex( hCompleteThread);
    WaitForSingleObject( hRelease, INFINITE );
    IdleThreads--;
    if(IdleThreads>0){
        ReleaseMutex( hRelease);
    }
}

我不确定我是否使用了不正确的语法,或者只是没有完全掌握正在发生的事情。

【问题讨论】:

  • 您正在使用 Windows API – 这是一个库。如果您仍然要使用库,为什么不使用跨平台的库,例如 Boost.Thread
  • 这段代码你现在有什么行为?
  • 或者,如果您想避免使用库,请在内联汇编中编写自己的互斥锁。
  • 我没有进入“IdleThreads--”你有任何参考代码/教程在汇编中编写它吗?/
  • 您是否真的想用汇编语言编写它,因为那里有高质量、预先测试、预先记录的 C++ 库?

标签: c++ multithreading winapi mutex


【解决方案1】:

如果没有更多的上下文,就不可能知道你在做什么。 hCompleteThread 和 hRelease 是如何创建的? - 也就是说,它们是什么?

无论如何,您都可以使用信号量。信号量为您计算。它们非常适合这种生产者/消费者的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多