[c 多线程编程]请推荐一些c#多线程编程方面的书籍,谢谢!

2018-08-17 21:32  阅读 1,614 次

请推荐一些c#多线程编程方面的书籍,谢谢!

问题补充:线程池和异步编程
●C#高级编程第五版,最全的就是MSDN了,建议直接看MSDN,重点类是System.Threading相关的,及Timer类

浅谈linux 多线程编程和 windows 多线程编程的异同

问题补充:浅谈linux 多线程编程和 windows 多线程编程的异同
●转载自fychit创意空间 很早以前就想写写linux下多线程编程和windows下的多线程编程了,但是每当写时又不知道从哪个地方写起,怎样把自己知道的东西都写出来,下面我就谈谈linux多线程及线程同步,并将它和windows的多线程进行比较,看看他们之间有什么相同点和不同的地方。  其实最开始我是搞windows下编程的,包括windows编程,windows 驱动,包括usb驱动,ndis驱动,pci驱动,1394驱动等等,同时也一条龙服务,做windows下的应用程序开发,后面慢慢的我又对linux开发产生比较深的兴趣和爱好,就转到搞linux开发了。在接下来的我还会写一些博客,主要是写linux编程和windows编程的区别吧,现在想写的是linux下usb驱动和windows下usb驱动开发的区别,这些都是后话,等我将linux多线程和windows多线程讲解完后,我再写一篇usb驱动,谈谈windows 和linux usb驱动的东东。好了,言归正传。开始将多线程了。  首先我们讲讲为什么要采用多线程编程,其实并不是所有的程序都必须采用多线程,有些时候采用多线程,性能还没有单线程好。所以我们要搞清楚,什么时候采用多线程。采用多线程的好处如下:  (1)因为多线程彼此之间采用相同的地址空间,共享大部分的数据,这样和多进程相比,代价比较节俭,因为多进程的话,启动新的进程必须分配给它独立的地址空间,这样需要数据表来维护代码段,数据段和堆栈段等等。  (2)多线程和多进程相比,一个明显的优点就是线程之间的通信了,对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。但是对于多线程就不一样了。他们之间可以直接共享数据,比如最简单的方式就是共享全局变量。但是共享全部变量也要注意哦,呵呵,必须注意同步,不然后果你知道的。呵呵。  (3)在多cpu的情况下,不同的线程可以运行不同的cpu下,这样就完全并行了。  反正我觉得在这种情况下,采用多线程比较理想。比如说你要做一个任务分2个步骤,你为提高工作效率,你可以多线程技术,开辟2个线程,第一个线程就做第一步的工作,第2个线程就做第2步的工作。但是你这个时候要注意同步了。因为只有第一步做完才能做第2步的工作。这时,我们可以采用同步技术进行线程之间的通信。  针对这种情况,我们首先讲讲多线程之间的通信,在windows平台下,多线程之间通信采用的方法主要有:  (1)共享全局变量,这种方法是最容易想到的,呵呵,那就首先讲讲吧,比如说吧,上面的问题,第一步要向第2步传递收据,我们可以之间共享全局变量,让两个线程之间传递数据,这时主要考虑的就是同步了,因为你后面的线程在对数据进行操作的时候,你第一个线程又改变了数据的内容,你不同步保护,后果很严重的。你也知道,这种情况就是读脏数据了。在这种情况下,我们最容易想到的同步方法就是设置一个bool flag了,比如说在第2个线程还没有用完数据前,第一个线程不能写入。有时在2个线程所需的时间不相同的时候,怎样达到最大效率的同步,就比较麻烦了。咱们可以多开几个缓冲区进行操作。就像生产者消费者一样了。如果是2个线程一直在跑的,由于时间不一致,缓冲区迟早会溢出的。在这种情况下就要考虑了,是不让数据写入还是让数据覆盖掉老的数据,这时候就要具体问题具体分析了。就此打住,呵呵。就是用bool变量控制同步,linux 和windows是一样的。  既然讲道了这里,就再讲讲其它同步的方法。同样 针对上面的这个问题,共享全局变量同步问题。除了采用bool变量外,最容易想到的方法就是互斥量了。呵呵,也就是传说中的加锁了。windows下加锁和linux下加锁是类似的。采用互斥量进行同步,要想进入那段代码,就先必须获得互斥量。  linux上互斥量的函数是:  windows下互斥量的函数有:createmutex 创建一个互斥量,然后就是获得互斥量waitforsingleobject函数,用完了就释放互斥量ReleaseMutex(hMutex),当减到0的时候 内核会才会释放其对象。下面是windows下与互斥的几个函数原型。  HANDLE WINAPI CreateMutex(  __in LPSECURITY_ATTRIBUTES lpMutexAttributes,  __in BOOL bInitialOwner,  __in LPCTSTR lpName  );  可以可用来创建一个有名或无名的互斥量对象  第一参数 可以指向一个结构体SECURITY_ATTRIBUTES 一般可以设为null;  第二参数 指当时的函数是不是感应感应状态 FALSE为当前拥有者不会创建互斥  第三参数 指明是否是有名的互斥对象 如果是无名 用null就好。  DWORD WINAPI WaitForSingleObject(  __in HANDLE hHandle,  __in DWORD dwMilliseconds  );  第一个是 创建的互斥对象的句柄。第二个是 表示将在多少时间之后返回 如果设为宏INFINITE 则不会返回 直到用户自己定义返回。  对于linux操作系统,互斥也是类似的,只是函数不同罢了。在linux下,和互斥相关的几个函数也要闪亮登场了。  pthread_mutex_init函数:初始化一个互斥锁;  pthread_mutex_destroy函数:注销一个互斥锁;  pthread_mutex_lock函数:加锁,如果不成功,阻塞等待;  pthread_mutex_unlock函数:解锁;  pthread_mutex_trylock函数:测试加锁,如果不成功就立即返回,错误码为EBUSY;  至于这些函数的用法,google上一搜,就出来了,呵呵,在这里不多讲了。windows下还有一个可以用来保护数据的方法,也是线程同步的方式  就是临界区了。临界区和互斥类似。它们之间的区别是,临界区速度快,但是它只能用来同步同一个进程内的多个线程。临界区的获取和释放函数如下:  EnterCriticalSection() 进入临界区; LeaveCriticalSection()离开临界区。 对于多线程共享内存的东东就讲到这里了。  (2)采用消息机制进行多线程通信和同步,windows下面的的消息机制的函数用的多的就是postmessage了。Linux下的消息机制,我用的较少,就不在这里说了,如果谁熟悉的,也告诉我,呵呵。  (3)windows下的另外一种线程通信方法就是事件和信号量了。同样针对我开始举得例子,2个线程同步,他们之间传递信息,可以采用事件(Event)或信号量(Semaphore),比如第一个线程完成生产的数据后,就必须告诉第2个线程,他已经把数据准备好了,你可以来取走了。第2个线程就把数据取走。呵呵,这里可以采用消息机制,当第一个线程准备好数据后,就直接postmessage给第2个线程,按理说采用postmessage一个线程就可以搞定这个问题了。呵呵,不是重点,省略不讲了。  对于linux,也有类似的方法,就是条件变量了,呵呵,这里windows和linux就有不同了。要特别讲讲才行。  对于windows,采用事件和信号量同步时候,都会使用waitforsingleobject进行等待的,这个函数的第一个参数是一个句柄,在这里可以是Event句柄,或Semaphore句柄,第2个参数就是等待的延迟,最终等多久,单位是ms,如果这个参数为INFINITE,那么就是无限等待了。释放信号量的函数为ReleaseSemaphore();释放事件的函数为SetEvent。当然使用这些东西都要初始化的。这里就不讲了。Msdn一搜,神马都出来了,呵呵。神马都是浮云!  对于linux操作系统,是采用条件变量来实现类似的功能的。Linux的条件变量一般都是和互斥锁一起使用的,主要的函数有:  pthread_mutex_lock ,  pthread_mutex_unlock,  pthread_cond_init  pthread_cond_signal  pthread_cond_wait  pthread_cond_timewait

ios多线程编程详解?

●首先简单介绍什么叫线程 可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位。 共用堆,自有栈(资料说明iOS主线程栈大小为1M,其它线程为512K)。并发执行进度不可控,对非原子操作易造成状态不一致,加锁控制又有死锁的风险。 2:IOS中的线程 iOS主线程(UI线程),我们的大部分业务逻辑代码运行于主线程中。没有特殊需求,不应引入线程增加程序复杂度。 应用场景:逻辑执行时间过长,严重影响交互体验(界面卡死)等。IOS 多线程 有三种主要方法(1)NSThread(2)NSOperation(3)GCD 下面简单介绍这三个方法 1.NSThread 调用方法如下: 如函数需要输入参数,可从object传进去。2.NSOperation NSoperation也是多线程的一种,NSopertaion有2种形式 (1) 并发执行 并发执行你需要重载如下4个方法 //执行任务主函数,线程运行的入口函数 - (void)start //是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO
●IOS多线程编程对于初学者来说,总是会觉得很难理解和掌握,现在通过几个实例来更加系统全面的理解IOS多线程编程,希望对大家有所帮助。1:首先简单介绍什么叫线程可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位。共用堆,自有栈(资料说明iOS主线程栈大小为1M,其它线程为512K)。并发执行进度不可控,对非原子操作易造成状态不一致,加锁控制又有死锁的风险。2:IOS中的线程iOS主线程(UI线程),我们的大部分业务逻辑代码运行于主线程中。没有特殊需求,不应引入线程增加程序复杂度。应用场景:逻辑执行时间过长,严重影响交互体验(界面卡死)等。IOS 多线程 有三种主要方法
●多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。使用线程的好处有以下几点:  ·使用线程可以把占据长时间的程序中的任务放到后台去处理  ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度  ·程序的运行速度可能加快  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。  还有其他很多使用多线程的好处,这里就不一一说明了。  一些线程模型的背景  我们可以重点讨论一下在Win32环境中常用的一些模型。  ·单线程模型  在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。
●1:首先简单介绍什么叫线程可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位。共用堆,自有栈(资料说明iOS主线程栈大小为1M,其它线程为512K)。并发执行进度不可控,对非原子操作易造成状态不一致,加锁控制又有死锁的风险。2:IOS中的线程iOS主线程(UI线程),我们的大部分业务逻辑代码运行于主线程中。没有特殊需求,不应引入线程增加程序复杂度。应用场景:逻辑执行时间过长,严重影响交互体验(界面卡死)等。IOS 多线程 有三种主要方法(1)NSThread(2)NSOperation(3)**
●ios多线程编程,每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常操作系统负责多个线程的调度和执行。ios多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。使用ios线程的好处有以下几点:使用ios线程可以把占据长时间的程序中的任务放到后台去处理用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。程序的运行速度可能加快在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,ios线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
●每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。  什么是多线程?  多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。  使用线程的好处有以下几点:  ·使用线程可以把占据长时间的程序中的任务放到后台去处理  ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度  ·程序的运行速度可能加快  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。  还有其他很多使用多线程的好处,这里就不一一说明了。  一些线程模型的背景  我们可以重点讨论一下在Win32环境中常用的一些模型。  ·单线程模型  在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。  ·块线程模型(单线程多块模型STA)  这种模型里,一个程序里可能会包含多个执行的线程。在这里,每个线程被分为进程里一个单独的块。每个进程可以含有多个块,可以共享多个块中的数据。程序规定了每个块中线程的执行时间。所有的请求通过Windows消息队列进行串行化,这样保证了每个时刻只能访问一个块,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。

c元素瓷砖价格有多高?注意事项是什么?

●c元素瓷砖价格:¥73.80c元素瓷砖款式新颖、花色自然、光洁亮丽、强度高、耐污染、完全不透水、内在质量好,得到各行部门和用户的普遍赞誉。是具有文化底蕴,同时又不失时尚的陶瓷品牌。价格来源网络,仅供参考!
●你好,1、东鹏瓷砖东鹏瓷砖从1972年的起家到如今,不断的进步不断创新,其瓷砖专利已达到300多项,其瓷砖产品将特有的高新技术与东方文化结合,使得瓷砖的风格更加的贴近了生活。2、马可波罗瓷砖马可波罗品牌是奥运会主要建材供应商家,侧面的展示了其瓷砖的优良特性。其产品主要囊括了抛光砖、亚光砖、微晶石、手工砖等等。工装及家装的不二之选。3、新中源瓷砖新中源瓷砖是国内率先通过ISO9001国际质量体系认证及中国国家强制性产品3C认证的企业,在规格上有很多的选择余地,并且可以直接定制。4、欧神诺磁砖成立于1988年的欧神诺瓷砖,其推出的天韵石、七星玉岩、三元素、刚玉石等都是在居家之中接触比较多的。这几个瓷砖品牌在国内是比较好的,性价比高,口碑很不错,价格也合理,希望对你有帮助。
●卫生间贴砖贴多高主要看你吊顶做多高。贴砖的高度一般比吊顶向上80mm左右,因为这样才能更好的安装吊顶,还有安装吊顶打孔的时候不会损坏到瓷砖片。
●汇亚内墙釉面砖-经典系列HAS30591-E3A, 价格10.47元/片,釉面超厚,机械强度高;质量稳定、色差小,釉面平整、尺寸准确,偏差小;色泽鲜艳、花纹图案清晰、自然,装饰性强;花色规格品种多,配套齐全。以上价格来源于网络,仅供参考。

深圳市龙岗区南岭村委商住楼C栋1101的房屋地址信息编码是多

问题补充:深圳市龙岗区南岭村委商住楼C栋1101的房屋地址信息编码是多少

●房屋信息编码: 4403070040051400076000000

本文地址:https://www.ehuixue.com/12411.html
关注我们:微信公众号:扫描二维码慧学在线的微信号,公众号:********
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

发表评论


表情