- 博客(12)
- 资源 (3)
- 收藏
- 关注
转载 Linux下线程同步对象(3)——条件变量
<br /><br />在前面两篇文章中介绍了Linux下的互斥量和读写锁两种线程同步对象。这两种线程同步对象都是用来保护特定资源(内存,文件句柄等)的。假如某个线程需要等待系统处于某种状态下才能继续执行,Linux为了解决这种问题引入了条件变量这种线程同步对象,本文简要介绍一下条件变量。<br /> 条件变量必须要与互斥量一起使用时,允许线程以无竞争的方式等待特定条件的发生。线程在等待条件变量和通知条件变量之前都必须要先把保护条件变量的互斥量加锁。<br /> 和其他线程同步对象一样,条
2011-01-10 15:35:00 638
转载 Linux下线程同步对象(2)——读写锁
上文介绍了Linux下线程同步对象——互斥量,本文介绍另外Linux下同步对象——读写锁。 如果多个线程同时读资源,则不会发生竞争关系,也不会出现资源的不一致性,所以读资源的时候不需要同步对象保护。但是如果写某个资源的时候,必须要进行同步保护,否则将会出现不一致性。在上文的互斥量中,不管读写都加锁,这样对于读资源操作非常多,但写资源非常少的情况下,效率会比较低。Linux提供了读写锁来解决这种情况下的效率问题。 读写锁分为读锁定状态和写锁定状态,多个线程可以同时获得读锁定状态锁,进行各自的读
2011-01-10 15:34:00 876 1
转载 Linux下线程同步对象(1)——互斥量
进程是Linux资源分配的对象,Linux会为进程分配虚拟内存(4G)和文件句柄等资源,是一个静态的概念。线程是CPU调度的对象,是一个动态的概念。一个进程之中至少包含有一个或者多个线程。这些线程共享该进程空间的内存和文件句柄资源,多个线程竞争地获得这些资源。为了防止多个线程访问资源的不一致性,多线程编程一个很重要的任务就是控制好线程同步。本文简单介绍一下Linux的同步对象和使用时的一些注意事项。1、互斥量(Mutex) 互斥量本质上讲是一把锁,该锁保护一个或者一些资源(内存或者文件句柄等数据)。
2011-01-10 15:33:00 572
转载 多线程队列的算法优化
<br />原文: http://www.parallellabs.com/2010/10/25/practical-concurrent-queue-algorithm/<br /> 多线程队列(Concurrent Queue)的使用场合非常多,高性能服务器中的消息队列,并行算法中的Work Stealing等都离不开它。对于一个队列来说有两个最主要的动作:添加(enqueue)和删除(dequeue)节点。在一个(或多个)线程在对一个队列进行enqueue操作的同时可能会有一个(或多个)线程对这个队列
2010-12-31 16:39:00 724
转载 GCC编译优化指南
<br />原文: http://www.svn8.com/shouce/Linux/optimize_guide.html<br />GCC编译优化指南作者:金步国版权声明<br />本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。其他作品<br />
2010-12-23 14:54:00 625
转载 在 POSIX 线程编程中避免内存泄漏
POSIX 线程(pthread)编程定义了一套标准的 C 编程语言类型、函数和常量 — 且 pthreads 提供了一种强大的线程管理工具。要充分使用 pthreads,您要避免常见错误。一个常见的错误就是忘记联接可接合的线程,从而导致内存泄漏并增加工作量。在该篇技巧型文章中,学习 POSIX 线程基础,了解如何识别和检测线程内存泄漏,并获得避免出现这种情况的可靠建议。
2010-12-08 15:29:00 361
原创 关于C++中对象数组指针
class TCA{public: virtual void set(int n ){}};class TCB:publc TCA{};int main( ){ TCA *pcla; pcla = new TCB[10]; for( int i(0); i pcla.set(1);}//! 这段代码是错误的。必须将 pcla申明为 TCB,否则只能访问第一个对象,即pcla[0]。原因:C++不支持异构指针对象。//! 同时在当初始对象数组时,必须使用无参数或者全是默认参数的
2010-12-08 14:19:00 556
原创 注意隐式类型转换
<br /><br />int nn1 = -65;<br />unsigned int nn2 = 63;<br />int nn3 = nn1%nn2;<br />printf("%d,%d/n", nn3,-65%63);<br />编译后,执行结果:2,-2<br />原因:隐式类型转换。<br />注意:string.length()方法,在不同平台返回值的类型是不一样的。在AIX下返回类型为unsigned int;而在VC下则是int。<br />因此在有隐式类型转换风险时必须注意,不
2010-12-08 14:18:00 385
转载 strcat在某种特定条件下的优化
strcat是C语言一个基本的字符串操作函数,它的源代码一般是这样的。char *strcat(char *dest, const char *src) { char *tmp = dest; while (*dest) dest++; while ((*dest++ = *src++) != '/0'); return tmp; } 由此可见,strcat调用时,先移动目标字符串的指针到其尾部,再进行复制。这种做法对于下标比较大的数组重复调用时,效
2010-12-08 14:16:00 458
转载 C++中的四种强制类型转换的区别
<br /><br />使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。<br /> <br />1 static_cast<br />用法:static_cast < type-id > ( expression ) <br />该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:<br />①用于类层次结构中基类和子类之间指针或引用的转换
2010-12-08 12:01:00 363
转载 IP报文头详解以及定义
<br /><br />IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节。 <br />下图为IP分组的报文头格式,报文头的前20个字节是固定的,后面的可变。<br /> <br />版本:占4位(bit),指IP协议的版本号。目前的主要版本为IPV4,即第4版本号,也有一些教育网和科研机构在使用IPV6。在进行通信时,通信双方的IP协议版本号必须一致,否则无法
2010-12-08 12:00:00 1171
转载 各类报头TCP/UDP/ICMP/IP结构
<br /><br />当我们使用Raw Socket的时候,可以完全自定义IP包,一切形式的包都可以"制造"出来。因此,本文事先必须对TCP/IP所涉及IP包结构进行必要的交待。<br /><br /> 目前,IPv4的报头结构为常用的ICMP报文包括ECHO-REQUEST(响应请求消息)、ECHO-REPLY(响应应答消息)、Destination Unreachable(目标不可到达消息)、Time Exceeded(超时消息)、Parameter Problems(参数错误消息)、Source
2010-12-08 11:59:00 527
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人