多线程中的list解决方法

多线程中的list
我用一个线程往list中push需要分析的数据。未加任何锁。

另外一个函数,从list中pop取数据处理,比较慢,启动了4个线程,为避免冲突,取数据代码用了临界区。

设想中,这样搭配速度比较合理。但任务管理器中显示,cpu使用率仅45%。

感到费解。

直到往list中push数据的线程工作结束后,cpu使用率才打到97%。


看来往list中push数据时,其它线程是无法取数据,

哪么这是stl自身的特性,还是vc 或则是操作系统的特性?

------解决方案--------------------
对于xp来说, 一个死循环线程,都只占30%左右的CPU. 这跟list类无关.
push不加锁,pop加锁,那等于没有加锁,比如则要pop前,又push了一个数据,再执行pop,这时pop出去的数据就已经不是你想的那个数据了.
------解决方案--------------------
CPU是OS调度,你又是多线程,自然不可能完全占用,只有你的操作有死循环等才能占用比较多.
线程不同步会影响你取得数据,可能不正确等
------解决方案--------------------
探讨
我用一个线程往list中push需要分析的数据。未加任何锁。

另外一个函数,从list中pop取数据处理,比较慢,启动了4个线程,为避免冲突,取数据代码用了临界区。

设想中,这样搭配速度比较合理。但任务管理器中显示,cpu使用率仅45%。

感到费解。

直到往list中push数据的线程工作结束后,cpu使用率才打到97%。


看来往list中push数据时,其它线程……

------解决方案--------------------
这要看你的cpu是几核的 两个核一个程序运行使用率不会超过50%
------解决方案--------------------
这种情况还是应该自己来控制而不是依赖MS的实现,不然如果理解偏差,容易出问题