window下编程,关于实时处理海量数据衍生的面试题!
现在在Windows下编程,是实时处理海量数据的要求,这时性能有较高的要求。现在的问题是这样的:
一个线程A产生数据,累积到一定数量后交给线程B去后续处理(例如写盘什么的),其实是满简单的一个需求了,我就开辟了2个buffer,我的想法是先让A获得第一个buffer的控制权,然后线程B再去等第一buffer控制权,当第一个buffer写满后,线程A释放第一个buffer的控制权,再去获得第二的buffer的控制权。线程B获得第一个buffer的控制权后处理数据,然后释放第一个buffer的控制权,再去等第二个buffer的控制权。以此交替。
我可以采用EnterCriticalSection,LeaveCriticalSection来解决这个同步,但是问题是,当A线程对buffer操作时,如果B也在等同一个buffer的控制权,这时候B是不是一直在内核模式和用户模式下切换,耗费资源非常大?有没有其他合理的办法。
因为程序中很多对这样的线程,我的目标要求是:
当A线程操作完成后,通知B,B在获得控制权前应该是"休眠"状态,不太耗费资源。对windows下的多线程了解不多,不知道那种同步互斥方式做合适我的应用。谢谢!!!!