c – 另一种检查std :: queue事件的方法?
好吧,我正在尝试处理某种队列.我有一个IO线程,它专门用于从std :: queue中弹出数据,但问题是我正在使用Sleep()以防止100%cpu常量检查.当然还有其他线程会将项添加到std :: queue.
我怎样才能创建一个事件,以便线程处于休眠状态,并且仅在std :: queue不为空时才启动? IO线程 Sleep(100); while (!myqueue.empty()) { //process data FIFO myqueue.pop(); //pop out and continue } 非常感谢,谢谢!哦,这是针对c 11或c 03,无关紧要 – 在Windows上. 解决方法
std :: queue绝对与线程无关.完全没有.它的.empty()成员不是线程安全的(只是可重入的)!这同样适用于其他所有成员.因此,多个线程可以使用不同的队列,但是每次只有一个线程可以对每个实例执行任何操作.
C 11或C 03很重要.因为C 11定义了线程同步原语,而C 03没有,你必须使用OS API. 在C 11中你会对 在C 03中,您会对Boost.Thread(主要与C 11兼容)Events或Semaphores感兴趣. 在任何一种情况下,std :: queue :: push()和std :: queue :: pop()本身都必须受到互斥的保护. std :: condition_variable甚至强制你使用一个( 在Windows上,C 11类仅在Visual Studio 2012和Windows 8中可用.较旧的编译器使用Boost(优点是它可以是可移植的)或本机API. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |