`
net_liu
  • 浏览: 232763 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单多线程与锁

阅读更多

多线程与锁:

namespace Threads
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread[] ths = new Thread[5];
            for (int i = 0; i < ths.Length; i++)
            {
                ths[i] = new Thread(new ThreadStart(Print));
                ths[i].Name = "Thread" + i;
            }

            foreach (Thread th in ths)
            {
                th.Start();
                Thread.Sleep(5);
            }
            Console.ReadLine();
        }

        private static object locked = new object();
        public static void Print()
        {
            lock (locked)
            {
                //显示线程信息。
                Console.WriteLine(Thread.CurrentThread.Name);
                Console.Write("你的号码是:");
                for (int i = 0; i < 5; i++)
                {
                    Thread.Sleep(100 * new Random().Next(5));
                    Console.Write(i+",");
                }
                Console.WriteLine();
            }
        }
    }
}

 

 

简单线程池:

namespace ThreadPool2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main Thread:" + Thread.CurrentThread.ManagedThreadId);

            Print p = new Print();
            WaitCallback back = new WaitCallback(PrintTheNumbers);
            for (int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem(back, p);
            }
            Console.WriteLine("All tasks queued");
            Console.ReadLine();
        }
        public static void PrintTheNumbers(object state)
        {
            Print p = (Print)state;
            p.PrintNumber();
        }

        class Print
        {
            private object locked = new object();
            public void PrintNumber()
            {
                lock (locked)
                {
                    Console.WriteLine("ThreadName:" + Thread.CurrentThread.ManagedThreadId);
                    Console.Write("你的号码是:");
                    for (int i = 0; i < 5; i++)
                    {
                        Console.Write(i + ",");
                        Thread.Sleep(500);
                    }
                    Console.WriteLine();
                }
            }
        }
    }
}

 

 

分享到:
评论

相关推荐

    易语言线程安全之原子锁与读写锁

    本文将深入探讨易语言中的原子锁与读写锁。 原子操作是一种不可分割的操作,它在执行过程中不会被其他线程中断。在易语言中,原子操作常用于更新计数器、标志位等简单数据类型的场景,避免了线程间的竞态条件。例如...

    c++ 多线程 锁的使用

    c++ 使用多线程时要涉及到线程锁的使用, 本例简单易用……

    多线程基础与基于多线程的简单聊天室

    本压缩包“多线程基础与基于多线程的简单聊天室”提供了对多线程技术的实践理解和二次开发的基础。以下是关于这个主题的详细知识点: 1. **多线程的概念**:多线程是指在一个程序中同时执行多个不同的线程,每个...

    单线程与多线程的区别

    多线程也有其挑战,比如线程间的数据共享可能导致竞态条件、死锁等问题,需要使用锁或其他同步机制来避免。此外,线程创建、销毁和管理也消耗资源,过多的线程可能会导致系统性能下降。 在实际编程中,如何选择单...

    C#使用读写锁三行代码简单解决多线程并发的问题

    本文通过三行代码展示了如何使用读写锁解决多线程并发写入文件的冲突。 读写锁的核心在于,它允许多个线程同时读取资源,但只允许一个线程写入资源。这样,当多个线程尝试写入时,只有一个线程能够获得写锁,其他...

    简单多线程程序

    本教程“简单多线程程序”旨在帮助初学者理解这一核心概念。 多线程是指在一个进程中同时运行多个独立的执行线程。每个线程都有自己的程序计数器、栈和局部变量,它们共享进程的全局变量和系统资源。通过多线程,...

    C#多线程互斥实例 多线程获取同一变量

    总的来说,理解和掌握多线程中的互斥锁是非常重要的,它有助于我们在并发环境中保证程序的正确性和稳定性。通过合理的线程同步,我们可以有效地避免数据竞争,从而构建更加健壮的多线程应用程序。

    多线程编程示例

    在IT领域,多线程编程是一项关键技能,尤其是在性能优化和并发处理方面。本文将深入探讨多线程编程的基础知识,以帮助初学者快速入门。 首先,我们需要理解什么是多线程。多线程是指在一个进程中同时执行多个独立的...

    C++多线程学习

    在C++编程中,多线程技术是一种强大的工具,它允许程序同时执行多个任务,从而提高了效率和响应性。在"C++多线程学习"这个主题中,我们主要探讨的是如何在C++环境中创建和管理线程,以及解决并发访问时可能出现的...

    多线程锁的解释范例

    线程锁则是确保多线程环境下的数据一致性、避免竞态条件和死锁的重要工具。本示例通过一个简单的银行账户取款问题来阐述多线程和线程锁的概念。 首先,我们有一个`Account`类,它代表银行账户,包含账户ID和余额。...

    易语言简单多线程写法源码

    总之,易语言简单多线程写法源码是学习多线程编程的一个好起点,特别是对于初学者,它可以帮助理解多线程的基本原理和实践方法。通过实际操作和调试这些源码,我们可以更好地掌握易语言中的多线程编程技术,并为将来...

    python3之多线程及线程锁的基础用法

    ### Python3之多线程及线程锁的基础用法 #### Python 多线程库简介 Python 提供了两种方式来支持线程:_thread 和 threading。其中,_thread 库提供了一个较为基础且底层的支持,它包含了创建简单线程的基本功能...

    PB多线程实现

    1. **线程安全**:确保共享数据在多线程环境下正确访问,通常需要使用锁(如Monitor或Mutex)、信号量(Semaphore)或原子操作来实现。 2. **线程间通信**:线程间的同步和通信至关重要,可以使用事件(Event)、...

    线程和线程锁的使用源码例子

    线程锁,又称为同步机制,是为了在多线程环境下保证数据的一致性和完整性而引入的,避免了多个线程同时访问共享资源可能导致的数据不一致问题。下面我们将深入探讨线程和线程锁的概念以及它们在实际应用中的使用。 ...

    C++多线程内存池和简单的BUFFER类

    在多线程环境下,内存池可以避免线程竞争,因为每个线程都可以有自己的内存池,从而减少锁的使用,提高并发性能。 C++标准库并没有内置的内存池实现,但我们可以自定义一个。通常,内存池会包含以下组件: 1. 初始...

    用MFC写的简单多线程下载例子

    在这个“用MFC写的简单多线程下载例子”中,我们将探讨如何利用MFC实现多线程下载功能。 首先,理解多线程的基本概念至关重要。在单线程应用中,任务执行按顺序进行,而多线程则允许同时执行多个任务。在下载场景中...

    Linux系统下的多线程编程入门.pdf

    本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程概念 多线程是指在一个进程中可以同时执行多个独立的代码段,每个代码...

    MFC线程获取锁

    在编程领域,特别是涉及到多线程编程时,同步机制至关重要,...通过理解和熟练使用MFC的线程锁,开发者可以构建更加稳定、高效的多线程应用程序。在实际开发中,务必确保正确地释放锁,避免潜在的竞态条件和死锁问题。

Global site tag (gtag.js) - Google Analytics