linux 多线程
sir_zeng
这个作者很懒,什么都没留下…
展开
-
多线程的那点儿事(之读写锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢转载 2013-01-24 20:49:09 · 320 阅读 · 0 评论 -
多线程的那点儿事(之嵌套锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 嵌套锁这个概念,主要是为了根据编程中的一种情形引申出来的。什么情况呢,我们可以具体说明一下。假设你在处理一个公共函数的时候,因为中间涉及公共数据,所以你加了一个锁。但是,有一点比较悲哀。这个公共函数自身也加了一个锁,而且和你加的锁是一样的。所以,除非你的使用的是信号量,要不然你的转载 2013-01-24 20:49:39 · 374 阅读 · 0 评论 -
多线程的那点儿事(之原子锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 原子锁是多线程编程中的一个特色。然而,在平时的软件编写中,原子锁的使用并不是很多。这其中原因很多,我想主要有两个方面。第一,关于原子锁这方面的内容介绍的比较少;第二,人们在编程上面习惯于已有的方案,如果没有特别的需求,不过贸然修改已存在的代码。毕竟对很多人来说,不求有功,但求无过转载 2013-01-24 20:48:38 · 383 阅读 · 0 评论 -
多线程的那点儿事(之windows锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在windows系统中,系统本身为我们提供了很多锁。通过这些锁的使用,一方面可以加强我们对锁的认识,另外一方面可以提高代码的性能和健壮性。常用的锁以下四种:临界区,互斥量,信号量,event。 (1)临界区 临界区是最简单的一种锁。基本的临界区转载 2013-01-24 20:47:38 · 353 阅读 · 0 评论 -
多线程的那点儿事(之自旋锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 自旋锁是SMP中经常使用到的一个锁。所谓的smp,就是对称多处理器的意思。在工业用的pcb板上面,特别是服务器上面,一个pcb板有多个cpu是很正常的事情。这些cpu相互之间是独立运行的,每一个cpu均有自己的调度队列。然而,这些cpu在内存空间上是共享的。举个例子说,假设有一个转载 2013-01-24 20:47:06 · 429 阅读 · 0 评论 -
多线程的那点儿事(基础篇)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程?当然,要了解到多进程,就要涉及到操作系统。不过大家也不要紧张,听我慢慢道来。这其中的环节其实并不复杂。 (1)单CPU下的多线程 在没有出现多核CPU之前,我们转载 2013-01-24 20:45:09 · 327 阅读 · 0 评论 -
多线程的那点儿事(之死锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 相信有过多线程编程经验的朋友,都吃过死锁的苦。除非你不使用多线程,否则死锁的可能性会一直存在。为什么会出现死锁呢?我想原因主要有下面几个方面: (1)个人使用锁的经验差异 (2)模块使用锁的差异 (3)版本之间的差异 (4)分支之间的差异转载 2013-01-24 20:50:35 · 394 阅读 · 0 评论 -
多线程的那点儿事(之C++锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 编写程序不容易,编写多线程的程序更不容易。相信编写过多线程的程序都应该有这样的一个痛苦过程,什么样的情况呢?朋友们应该看一下代码就明白了,[cpp] view plaincopyprint?void data_process() {转载 2013-01-24 20:48:08 · 353 阅读 · 0 评论 -
多线程的那点儿事(之数据同步)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 多线程创建其实十分简单,在windows系统下面有很多函数可以创建多线程,比如说_beginthread。我们就可以利用它为我们编写一段简单的多线程代码,[cpp] view plaincopyprint?#include #incl转载 2013-01-24 20:45:56 · 310 阅读 · 0 评论 -
多线程的那点儿事(之避免死锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 预防死锁的注意事项:(1)在编写多线程程序之前,首先编写正确的程序,然后再移植到多线程(2)时刻检查自己写的程序有没有在跳出时忘记释放锁(3)如果自己的模块可能重复使用一个锁,建议使用嵌套锁(4)对于某些锁代码,不要临时重新编写,建议使用库里面的锁,或者自己曾经编写的锁转载 2013-01-24 20:51:13 · 301 阅读 · 0 评论 -
多线程的那点事儿(之数据互斥)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在多线程存在的环境中,除了堆栈中的临时数据之外,所有的数据都是共享的。如果我们需要线程之间正确地运行,那么务必需要保证公共数据的执行和计算是正确的。简单一点说,就是保证数据在执行的时候必须是互斥的。否则,如果两个或者多个线程在同一时刻对数据进行了操作,那么后果是不可想象的。转载 2013-01-24 20:46:34 · 395 阅读 · 0 评论 -
多线程的那点儿事(之无锁队列)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于编写多线程的朋友来说,队列具有天生的互斥性。在队列里面,一个负责添加数据,一个负责处理数据。谁也不妨碍谁,谁也离不开谁。所以,队列具有天生的并行性。[cpp] view plaincopyprint?#define MAX_NUMBER转载 2013-01-24 20:53:02 · 396 阅读 · 0 评论 -
多线程的那点儿事(之多线程调试)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 软件调试是我们软件开发过程中的重要一课。在前面,我们也讨论过程序调试,比如说这里。今天,我们还可以就软件调试多讲一些内容。比如说条件断点,数据断点,多线程断点等等。[cpp] view plaincopyprint?#include int转载 2013-01-24 20:52:06 · 293 阅读 · 0 评论 -
多线程的那点儿事(之生产者-消费者)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 生产者-消费者是很有意思的一种算法。它的存在主要是两个目的,第一就是满足生产者对资源的不断创造;第二就是满足消费者对资源的不断索取。当然,因为空间是有限的,所以资源既不能无限存储,也不能无限索取。 生产者的算法,[cpp] view plainc转载 2013-01-24 20:50:06 · 307 阅读 · 0 评论