| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 503 人关注过本帖
标题:多线程的一个疑问
只看楼主 加入收藏
邵帅
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:20
帖 子:174
专家分:505
注 册:2012-8-27
结帖率:78.26%
收藏
已结贴  问题点数:20 回复次数:2 
多线程的一个疑问
问题描述:有一个链表,里面的数据我需要处理,链表里的数据是从外界传来的,添加到链表尾。我开了一个线程来对链表里的数据进行处理,从链表的头开始,只有有数据就处理(用的死循环),处理后就删除链表头。
因为链表是共享变量,因此需要用线程同步。问题是一个是主线程,一个是工作线程,线程同步会不会造成程序主线程很卡?另外如果我再开一个线程来完成向链表添加数据,那么由于外界传来数据是很频繁的,就有可能建立好多个线程,既占用了太多资源,同时也降低了程序的性能。

求解答!
搜索更多相关主题的帖子: 多线程 资源 
2014-05-14 11:39
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
如果加锁,是有可能卡的,如果你控制的好,卡的时间就可以忽略了。

主线程加入处理的接点item {
  lock() //锁链表  
  list.add(item); // 加入要处理的节点(item)到链表
  unlock() // 解锁


工作线程 {
   while (true) {
       item = NULL
       lock()
       if (list not empty) {
          item = list.remove();// 移除待工作的项,你自己根据自己需求确定移除 是头还是尾部item 就行了。返回item。
       }
       unlock();

        if (item != NULL) {
           dosomething(item); 处理数据
        


    }


注意红色的部分,如果这部分工作很慢,那么这块就不应该放在lock 到unlock 之间了。

如果你的链表设计的很好(链表的插入一个Item和删除是很快的)。那么主界面卡的那个时间用户是感受不到的

[ 本帖最后由 yuccn 于 2014-5-16 12:16 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-05-16 12:14
邵帅
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:20
帖 子:174
专家分:505
注 册:2012-8-27
收藏
得分:0 
回复 2 楼 yuccn
多谢。
我也是采用这样的方法,发现效果还可以。因为工作线程里面对元素的处理也是很快的。

Figure out what you like. Try to become the best in the world of it.
2014-05-17 16:17
快速回复:多线程的一个疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018102 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved