C# 多线程操作队列

using System;
using System.Collections.Generic;
using
System.Linq;
using System.Text;
using System.Threading;
using
System.Net;
using System.Runtime.InteropServices;
using
System.Net.Sockets;
using System.IO;
using System.Collections;

namespace ConsoleApplication1
{

public class prodert
{
private string urls;

private string name;
public string Name
{

set { this.name = value; }
get { return this.name; }

}

public string Urls
{
set { this.urls =
value; }
get { return this.urls; }
}
}

class IPSearch
{
static Queue<prodert> q = new
Queue<prodert>();
public static object a = new object();

static void Main(string[] args)
{

Dictionary<string, string> dic = new Dictionary<string,
string>();

for (int i = 0; i < 100; i++)

{
prodert p = new prodert();
p.Urls =
"http://www.hao123.com" + i.ToString();
p.Name = "hao123com"
+ i.ToString();
q.Enqueue(p);
}

Thread t1 = new Thread(new ThreadStart(getQueue));

Thread t2 = new Thread(new ThreadStart(getQueue));
Thread t3 =
new Thread(new ThreadStart(getQueue));
t1.Name = "t1";

t1.Start();
t2.Name = "t2";
t2.Start();

t3.Name = "t3";
t3.Start();

Console.ReadKey();
}
private static void getQueue()

{
for (int i = 0; i < 10; i++)
{

aa();
}
}
private static void
aa()
{
lock (a)
{
if
(q.Count > 0)
{
prodert p1 =
q.Dequeue();
Thread.Sleep(100);

Console.WriteLine(p1.Name + p1.Urls+"------"+Thread.CurrentThread.Name);

}
}
}
}
}

时间: 2024-08-06 11:53:25

C# 多线程操作队列的相关文章

iOS:操作队列实现多线程NSOperation

NSOperation具体使用:直接继承NSObject 它的子类有:NSBlockOperation.NSInvocationOperation 还有一个必须的类,队列,用来装创建的线程 NSOperationQueue 理解:这个方式是如何实现多线程呢?是通过操作队列来实现多线程的.即主线程是一个主队列,再创建一个队列并将其他的线程加入其中同步执行.如果对共享资源的争夺放在主线程队列中,则不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上:否则的话,仍需要关心数据同步的问

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

C# 多线程与队列操作小练刀

之前写Web没有应用到多线程与队列的知识,写了个小程序,练了一把手,模拟商品抢购,代码如下: class Program { public static Random r = new Random(); public static int GoodsStock = 30; public static Queue payq = new Queue(); public static Queue waitq = new Queue(); static void Main(string[] args)

多线程操作C++ STL vector出现概率coredump问题及尽量避免锁的双缓冲队列

多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题,  程序崩了.场景是这样的:某全局配置参数保存在一个vector中,需要定时更新(更新线程), 另外的工作线程去读取配置. 这种场景是非常普遍的. 在该场景中,程序没有枷锁,概率coredump, 实际情况是,服务跑了一段时间后,必然coredump.   很显然, 更新线程执行clear,然后在push_back操作时, 会导致工作线程的vect

iOS 数据库多线程操作

SQLite是支持多线程操作的, 需要在初始化database是做一个线程安全的config,参考下面链接,看起来比较复杂. http://www.cnblogs.com/wfwenchao/p/3964213.html 很多iOS项目中都使用FMDB这个第三方开源库,但FMDB不能在多个线程中共同一个FMDatabase对象,因为这个类本身不是线程安全的,如果这样使用会造成数据混乱等问题. 如要需要多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了. 首先用一个数据

C#中级-常用多线程操作(持续更新)

一.前言       多线程操作一直是编程的常用操作,掌握好基本的操作可以让程序运行的更加有效.本文不求大而全,只是将我自己工作中常常用到的多线程操作做个分类和总结.平时记性不好的时候还能看看.本文参考了多篇园子里的精彩博文,在文章最后会贴出具体来源,感谢他们的无私奉献. 二.关于线程 (1) 为何使用线程: 可以使用线程将代码同其他代码隔离,提高应用程序的可靠性: 可以使用线程来简化编码: 可以使用线程来实现并发执行. (2) 进程.应用程序域以及线程的关系: 进程(Process)是Wind

MFC的多线程操作

记得用MFC做了一个图像自动修复软件,当时没有多线程操作这一概念,由于图像修复算法比较复杂,因此,当执行图像修复时,程序就像卡死了似得而不能做其他操作.其实MFC对这种情况有一种很好地解决方案,那就是采用多线程编程技术.以图像修复算法为例,由于其本身需要耗费大量时间,因此我们可以单独开一个线程让他执行修复而不影响主程序的操作. 关于线程的一些概念,以及在VS2013下的实例: MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的

Java多线程 阻塞队列和并发集合

转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的线程安全的集合类,通过下面的学习,您需要掌握这些集合的特点是什么,底层实现如何.在何时使用等问题. 3.1 BlockingQueue接口 java阻塞队列应用于生产者消费者模式.消息传递.并行任务执行和相关并发设计的大多数常见使用上下文. BlockingQueue在Queue接口基础上提供了额外

IOS多线程操作

多线程的概念 进程 ·正在运行中的程序被成为进程,负责程序运行的内存分配 ·没一个进程都有自己独立的虚拟内存空间 线程 ·线程是进程中一个独立的执行路径也称之为控制单元 ·一个进程至少包含一条线程,主线程 ·可以将耗时的执行路径如网络请求放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时执行 还要解释一个概念:多任务调度系统 每个应用程序由操作系统分配的短暂的时间片(Timeslice)轮流使用CPU,由于CPU对每个时间片的处理速度非常快,