正确同步两个线程

时间:2012-12-18 20:45:33

标签: visual-c++ mfc

有两个线程使用AfxBeginThreads启动并按照所示的方式进行同步。如何使用Createevent,SetEvent..etc正确同步它们?我可以看到调用每个事件的实际代码顺序吗?它似乎有效但可能不是正确的实现。

volatile  unsigned char r = 0;

    DWORD thread1(Lpvoid ...)
    {
        WritetoBuffer
        r=1;
    }

    DWORD thread2(Lpvoid ...)
    {
        if(r==1)
        ReadsBuffer
        r=0;
    }

1 个答案:

答案 0 :(得分:0)

你的问题不清楚完全你想要实现的目标:thread1只写一次,thread2只读一次吗?或thread1经常写,而thread2经常读?

您可能想查看维基百科上Producer-Consumer problem的说明。该页面甚至包含一个C ++实现(它使用新的C ++ 11特性,因此您可能无法编译它),它应该让您了解如何使用MFC和Win32 API实现它。

您还可以在CodeProject上查看Using Semaphores: Multithreaded Producer/Consumer。本文提供了一个使用Windows API函数的实现,并很好地解释了这种情况。

我希望这会有所帮助。