多线程---队列

转载 2012年03月26日 15:57:00

对于编写多线程的朋友来说,队列具有天生的互斥性。在队列里面,一个负责添加数据,一个负责处理数据。谁也不妨碍谁,谁也离不开谁。所以,队列具有天生的并行性。


只针对:一个线程读,一个线程写。当不满足这个先决条件,多线程也完蛋,也得进队列加锁,出队列加锁

  1. #define MAX_NUMBER 1000L  
  2. #define STATUS int  
  3. #define OK     0  
  4. #define FALSE -1  
  5.   
  6. typedef struct _QUEUE_DATA  
  7. {  
  8.     int data[MAX_NUMBER];  
  9.     int head;  
  10.     int tail;  
  11. }QUEUE_DATA;   
    此时,一个线程压入数据,操作为push_data,
  1. STATUS push_data(QUEUE_DATA* pQueue, int data)  
  2. {  
  3.     if(NULL == pQueue)  
  4.         return ERROR;  
  5.   
  6.     if(pQueue->head == ((pQueue->tail) + 1)% MAX_NUMBER)  
  7.         return ERROR;  
  8.   
  9.     pQueue->data[pQueue->tail] = data;  
  10.     pQueue->tail = (pQueue->tail + 1)% MAX_NUMBER;  
  11.     return OK;  
  12. }  
    那么,还有一个线程就负责处理数据pop_data,
  1. STATUS pop_data(QUEUE_DATA* pQueue, int* pData)  
  2. {  
  3.     if(NULL == pQueue || NULL == pData)  
  4.         return ERROR;  
  5.   
  6.     if(pQueue->head == pQueue->tail)  
  7.         return ERROR;  
  8.   
  9.     *pData = pQueue->data[pQueue->head];  
  10.     pQueue->head = (pQueue->head + 1)% MAX_NUMBER;  
  11.     return OK;  
  12. }  


总结:
    (1)队列只适合两个线程并行使用,一个压入数据,一个弹出数据
    (2)队列是没有锁的并行,没有死锁的危险

    (3)队列中head和tail只有在计算结束之前的时候才能进行自增运算

JAVA多线程与队列

JAVA 已经给我们提供了比较好的队列实现Queue,继承于Collection。 本次我使用的是BlockingQueue,继承于Queue。              在Concurrent包中,...
  • wanghuan203
  • wanghuan203
  • 2014年12月31日 11:06
  • 10172

【原创】简单的python多线程队列

import threading #线程库 import Queue #队列库 import string #字符串操作库 #继承Thread class g(threading.Thread):...
  • u012731379
  • u012731379
  • 2017年03月20日 14:42
  • 424

redis队列及多线程应用

经过一段时间项目的沉淀之后,对实际应用中的多线程开发及队列使用产生了深厚的兴趣,也将>仔细的阅读了两三遍,也看了很多并发编程的实践项目,也有了深刻的理解与在实践中合理应用队列、多线程开发的应用场景 ...
  • dayangshu3009
  • dayangshu3009
  • 2016年01月19日 10:26
  • 819

文件上传-队列多线程读取文件内容

队列多线程读取文件内容 为什么采用多线程队列的方式呢?主要是如果文件一行一行读取处理的话,页面上传文件后,需要等待服务器响应。如果文件的内容数据量很大的话,页面就一直等待服务器响应,毕竟服务器处理这些...
  • g893465244
  • g893465244
  • 2016年08月22日 18:25
  • 2542

Java 多线程 生产者和消费者 队列

wait()和notifyAll()方法以一种非常低级的方式解决了任务互操作问题,即每次交互时都握手。在许多情况下,你可以瞄向更高的抽象级别,使用同步队列来解决任务协作问题,同步队列在任何时刻都只允许...
  • liang_henry
  • liang_henry
  • 2016年12月23日 15:07
  • 762

java多线程和队列实例

java多线程和队列实例
  • cai_chinasoft
  • cai_chinasoft
  • 2016年06月02日 13:54
  • 12809

C++模板实现的队列多线程安全

直接给代码,没什么好说的。#pragma once #include #include #include #include #include template class Threadsa...
  • KellyGod
  • KellyGod
  • 2017年04月12日 22:26
  • 508

C# 多线程+队列处理大批量数据,进而缩短处理时间

C# 多线程+队列处理大批量数据,进而缩短处理时间
  • wangtinglong1
  • wangtinglong1
  • 2017年12月25日 11:16
  • 249

多线程集合队列等等

对于许多线程问题,可以通过使用一个或多个队列以优雅且安全的方式将其形式化。当试图向队列添加元素而队列已满,或是想从队列移出元素而队列为空的时候, 阻塞队列( blocking queue)导致线程阻塞...
  • u014034934
  • u014034934
  • 2017年01月23日 14:51
  • 445

c语言实现多线程下的链表队列

项目中需要一个链表,线程A进行入队操作,线程B进行查询出队操作,同时不希望线程B在队列为空时阻塞,降低cpu负载,因此考虑用pthread_cond_wait进行实现: 主要实现功能: 1)出队和入队...
  • judwenwen2009
  • judwenwen2009
  • 2015年12月23日 23:22
  • 2813
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程---队列
举报原因:
原因补充:

(最多只允许输入30个字)