上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 90 下一页
摘要: 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中, 往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢? 有,那就是读写锁。 (1)首先,我们定义一下基本的数据结构。[cpp] view plaincopytypedefstruct_RWLock{intcount;intstate;HANDLEhRead;HA... 阅读全文
posted @ 2012-01-17 09:43 董雨 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 生产者-消费者是很有意思的一种算法。它的存在主要是两个目的,第一就是满足生产者对资源的不断创造;第二就是满足消费者对资源的不断索取。当然,因为空间是有限的,所以资源既不能无限存储,也不能无限索取。 生产者的算法,[cpp] view plaincopyWaitForSingleObject(hEmpty,INFINITE);WaitForSingleObject(hMutex,INIFINITE);/*producenewresources*/ReleaseMutex(hMutex);... 阅读全文
posted @ 2012-01-17 09:42 董雨 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 预防死锁的注意事项:(1)在编写多线程程序之前,首先编写正确的程序,然后再移植到多线程(2)时刻检查自己写的程序有没有在跳出时忘记释放锁(3)如果自己的模块可能重复使用一个锁,建议使用嵌套锁(4)对于某些锁代码,不要临时重新编写,建议使用库里面的锁,或者自己曾经编写的锁(5)如果某项业务需要获取多个锁,必须保证锁的按某种顺序获取,否则必定死锁(6)编写简单的测试用例,验证有没有死锁(7)编写验证死锁的程序,从源头避免死锁 首先,定义基本的数据结构和宏,[cpp] view plaincopy 阅读全文
posted @ 2012-01-17 09:41 董雨 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 软件调试是我们软件开发过程中的重要一课。在前面,我们也讨论过程序调试,比如说这里。今天,我们还可以就软件调试多讲一些内容。比如说条件断点,数据断点,多线程断点等等。[cpp] view plaincopy#include<stdio.h>intvalue=0;voidtest(){inttotal;intindex;total=0;for(index=0;index<100;index++)total+=index*index;value=total;return;}int 阅读全文
posted @ 2012-01-17 09:40 董雨 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于编写多线程的朋友来说,队列具有天生的互斥性。在队列里面,一个负责添加数据,一个负责处理数据。谁也不妨碍谁,谁也离不开谁。所以,队列具有天生的并行性。[cpp] view plaincopy#defineMAX_NUMBER1000L#defineSTATUSint#defineOK0#defineFALSE-1typedefstruct_QUEUE_DATA{intdata[MAX_NUMBER];inthead;inttail;}QUEUE_DATA; 此时,一个线程压入数据,操作为p 阅读全文
posted @ 2012-01-17 09:40 董雨 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在互斥数据访问中有一种多读少写的情况。正对这么一种情形,我们也提出了读写锁的方案。但是呢,这个锁有些缺陷。什么缺陷呢?那就是,这个写锁需要在所有的读锁完成之后才能写。否则的话,写锁需要这么一直等下去。 那么,有没有什么办法能使得写操作快速一点进行呢?那就是顺序锁。[cpp] view plaincopytypedefstruct_SEQUENCE_LOCK{unsignedintsequence;HANDLEhLock;}SEQUENCE_LOCK; 有了这么一个数据结构之后。那么读锁怎么. 阅读全文
posted @ 2012-01-17 09:39 董雨 阅读(220) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/feixiaoxing/article/details/7055128【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面,为了使得写操作快速进行,我们定义了顺序锁。但是顺序锁有个缺点,那就是处理的数据不能是指针,否则可能会导致exception。那么有没有办法使得处理的数据包括指针呢?当然要是这个链表没有锁,那就更好了。 针对这种无锁链表,我们可以初步分析一下,应该怎么设计呢? (1)读操作没有锁,那么怎么判断读操作正在进行呢,只能靠标志位了; (2)写操作没有锁,那么读操作只能一个线... 阅读全文
posted @ 2012-01-17 09:37 董雨 阅读(455) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/feixiaoxing/article/details/7058393【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 要想编写多线程,那就要使用锁。而在软件编写中,数据结构是少不了的。所以,我们在编写多线程的时候,就需要考虑一下如何在数据结构中插入锁。当然,有些数据结构是没有锁的,所以自然这个锁并不一定是必须的。 比如说,我们编写一个多线程堆栈,应该怎么做呢,[cpp] view plaincopytypedefstruct_STACK{void*pData;intmaxLen;inttop... 阅读全文
posted @ 2012-01-17 09:36 董雨 阅读(254) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/feixiaoxing/article/details/7060751【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 多核编程并不是最近才兴起的新鲜事物。早在intel发布双核cpu之前,多核编程已经在业内存在了,只不过那时候是多处理器编程而已。为了实现多核编 程,人们开发实现了几种多核编程的标准。open-mp就是其中的一种。对于open-mp还不太熟悉的朋友,可以参照维基百科的相关解释。 open-mp的格式非常简单,原理也不难。它的基本原理就是创建多个线程,操作系统把这几个线程分到几个核.. 阅读全文
posted @ 2012-01-16 09:22 董雨 阅读(224) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/feixiaoxing/article/details/7064559【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 多线程一直是我比较喜欢的话题,当然也是很多朋友比较害怕的话题。喜欢它,因为它确实可以提高pc的使用效率;讨厌它,因为如果对它处理不好,反而会导致更大的麻烦。这里断断续续写了这么多,没有什么新意,主要是想结合自己这么多年的个人经历谈一谈自己的想法而已。真心希望这些文章能够达到抛砖引玉的效果,更多的达人可以奉献出自己的经验和方法。谢谢。 (01)多线程的哪些儿事(优先级反转) (... 阅读全文
posted @ 2012-01-16 09:21 董雨 阅读(286) 评论(0) 推荐(0) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 90 下一页