自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux同步技术之读写锁

互斥锁试图将想进入临界区的所有线程都阻塞住,但是有时候该临界区会涉及由这些线程共享的一个或多个数据的访问或更新,这时候我们就需要用到读写锁。系统读写锁的分配规则: (1)只要有没有线程持有给定的读写锁用于写,那么任意数量的线程可以持有该读写锁用于读。(系统规定写锁优先,但是可以更改为读锁优先) (2)仅当没有线程持有某个读写锁用于读或用于写时,才能分配该读写锁用于写。读写锁用于读称为共享锁,读写

2016-05-31 09:01:24 1689

原创 C++实现一个简单的红黑树(RB_TREE)

红黑树遵守的规则:一头(根)一脚(叶子节点)黑(黑色),黑同(从任意节点开始至根结点的黑色节点的个数相等)红不连(红色节点不能相连)以下是红黑树的插入和旋转函数的简易实现:#include <iostream>#include <assert.h>#include <string.h>using namespace std;typedef int Type;typedef enum{RED=0

2016-05-10 21:51:49 1880 1

原创 多线程网络服务的一般模型

前述: 多线程网络服务类似于多进程网络服务模式, 不同之处是多线程是为新到连接启动一个服务线程,而多进程模式是为新到连接启动一个服务进程。多线程网络服务模式的实现原理: 1> 在主服务线程里进行阻塞式等待,在绑定的端口进行侦听;2> 若当前有连接到来,则启动一个新线程为其服务,服务结束后,释放线程资源;多线程网络服务模式的流程图如下: 多线程网络服务模式的优点: 便捷, 高效;多线程网络服务模

2016-05-31 23:34:51 528

原创 多进程的网络服务的一般模型

前述:多进程网络服务模式其实是基于Linux系统提供的父子进程的关系为多用户提供并发服务,是比较受大众喜爱的并发服务技术,其基本的服务理念是来一个客户,就启动一个服务进程!多进程网络服务的实现原理:第一步:>主服务在端进行绑定监听,同时设置被绑定的地址与端口是可重用的(因为可能会有多个进程要在同一个端口进行监听),启动监听;第二步:>若当前有新连接到来,就启动一个子进程与其交互,服务结束后子进程自动

2016-05-31 22:25:11 459

原创 TCP如何实现可靠性

TCP传输控制协议 TCP 协议是一种面向连接的,为不同主机进程间提供可靠数据传输的协议。TCP 协议假定其所使用的网络栈下层协议(如IP 协议)是非可靠的,其自身提供机制保证数据的可靠性传输。在目前的网络栈协议族中,在需要提供可靠性数据传输的应用中,TCP 协议是首选的,有时也是唯一的选择。TCP协议使用的是网络层协议(如IP协议)提供的服务。 网络层协议主要完成对上层协议的数据的传递,但是不

2016-05-31 09:46:46 1694

原创 Linux同步技术之条件变量

条件变量也是Linux中的一种同步技术,不过其一般不单独使用而是要和互斥锁一起配合使用。如果单独使用互斥量的话,很容易发生死锁,所以条件变量为次应运而生^_^ ! 条件变量允许一个线程阻塞和等待另一个线程发送的信号,使用条件变量可以以原子的方式阻塞线程,直到满足某个条件为止,可以避免忙等。条件变量通常和互斥锁一起使用,互斥量主要用来保证对临界区的互斥进入,而条件变量则用于线程的阻塞等待,互斥锁锁定

2016-05-26 11:47:05 344

原创 Linux中的同步技术之互斥量

互斥量从本质上说就像是一把锁,提供资源的保护访问,互斥量有两种状态,锁住(lock)与解锁状态(unlock),用来保证一段时间内只有一个线程使用该共享资源。互斥量的数据类型为pthread_mutex_t,如果互斥锁变量是静态分配的,那么一般将其初始化为常值PTHREAD_MUTEX_INITIALIZER, 如:static pthread_mutex_t lock = PTHREAD_MUTE

2016-05-26 10:20:53 266

原创 拒绝服务型攻击

某个恶意的客户给服务器发送一个请求行,但是从来都不打开自己的FIFO来读,致使服务器处于停顿状态,这种就称为拒绝服务型攻击处理这种拒绝服务型攻击的方法是在特定操作上设置超时时钟,但是,将服务器程序编写成并发服务器比设置超时时钟更简单; 当设置成并发服务器时,拒绝服务型攻击就只会影响一个子进程,而不会影响主服务器。这种拒绝服务型攻击最易在迭代服务器中发生,但是并发服务器仍有可能发生,因为有可能会有一

2016-05-25 15:38:11 583

原创 管道(无名管道)和FIFO(有名管道)

管道是最初的UnixIPC形式,但是因为管道没有名字,所以它们只能用于有亲缘关系的进程使用;进而有名管道(FIFO)应运而生,有名管道有一个路径名与之关联,所以允许无亲缘关系的进程访问同一个FIFO。以下具体介绍管道: 管道的创建:管道由函数 int pipe(int fd[2]) 创建,提供一个单向数据流,该函数返回两个文件描述符,fd[0]和fd[1],前者用来打开读,后者用来打开写。管道

2016-05-25 09:55:54 511

原创 UNIX网络编程之线程浅析

什么是线程:线程是一个进程内部的控制系列;线程是CPU调度的基本单位线程的优点: (1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步时间的代码。 (2) 多个线程可以自动共享相同的存储地址空间和文件描述符。 (3) 有些问题可以通过将其分解从而改善整个程序的吞吐量。 (4) 交互的程序可以通过使用多线程实现相应时间的

2016-05-20 23:51:24 413

转载 线程的状态----joinable和detached

在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有的线程等待

2016-05-19 21:52:39 12893 1

原创 静态函数库与动态函数库(共享库)的创建

静态函数库的创建过程: (1)生成 *.o文件; [root@localhost mine]# ls add.cpp add.h main.cpp sub.cpp sub.h [root@localhost mine]# g++ -o add.o -c add.cpp [root@localhost mine]# ls add.

2016-05-19 20:57:45 521

原创 UNIX网络编程:IPC之信号量

信号量: 主要用来控制多个进程对临界资源的互斥访问,进程通过信号量来判断是否有可以访问的资源,信号量是一种同步机制信号是一种处理异步事件的方法; 不同于信号量信号量是一个计数器可用于同步多进程对共享数据对象的访问;要获得共享资源,进程需要:(1)测试控制该资源的信号量; (2)若此信号量值为正, 则进程可以使用该资源,进程将信号量值减一,表示进程使用了一个资源单位; (3)若此信号量值为0, 则

2016-05-17 01:11:57 470

原创 UNIX网络编程: IPC之共享内存

共享内存:是系统创建的特殊地址空间,允许不相干的多个进程使用该空间,即多个进程能够使用同一块内存的数据;优点: 共享内存不需要复制数据,直接读写内存,效率非常高; 缺点: 但是它本身不提供同步访问机制,我们可以通过信号量来进行控制其同步访问机制;共享内存的操作函数如下: shmget int shmget(key_t key,int shmsz,int shmflg) 该函数创建或访问

2016-05-16 23:05:34 335

原创 UNIX网络编程:IPC之消息队列

消息队列:将消息队列按队列的方式组织成的链表,每个消息都是其中的一个节点; 注意:消息队列的长度及每个消息的大小是有限制的消息队列的操作函数如下: msgget   int msgget(key_t key,int msgflg);   该函数作用是:创建一个消息队列或访问一个已经存在的消息队列;成功返回标示符,出错返回-1;   其第一个参数是一个整数IPC键,由ftok函数产

2016-05-16 21:13:19 761

原创 进程的相关知识

程序和进程的区别: 程序是静态的,就是我们通常编写的代码 进程是动态的,完成对程序的一次执行,执行完成该进程就over。进程是拥有资源的最小单位linux是用命令来管理进程的,如: ps, at, top, kill, pstree, nice, renice等进程由三个部分组成: 进程控制块(PCB)—->描述和控制进程运行的数据结构;主要包含进程标示符,进程控制和调度信息

2016-05-13 23:25:48 314

原创 fork函数

fork执行一次产生两个进程:一个子进程和进程本身(父进程) pid = fork(); fork()产生的子进程pid=0(标记子进程创建成功),pid = -1(标记子进程创建失败);**当子进程创建成功后,返回给父进程一个pid号,创建失败后返回给父进程 -1; 当返回 -1 时,父进程仍然有自己的ppid,而子进程创建失败,返回一个errno号,告诉系统子进程是如何创建失败的。#in

2016-05-13 21:40:33 380

原创 智能指针之scoped_ptr

scoped_ptr是一个类似auto_ptr的智能指针,scoped_ptr可以保证new操作符在堆上创建的对象在任何时候都可以被正确的删除。 scoped_ptr的最大特点就是一旦scoped_ptr拥有了某个对象的所有权,就无法再次取回!scoped_ptr的构造函数:scoped_ptr(T *p=0):px(p){}//其接受T*类型的指针p,创建出对象,并在该对象内部保存指针参数

2016-05-12 21:42:04 471

原创 关于hash的一个面试题

现在有一个用来存放整数的Hash表,Hash表的存储单位称为桶,每个桶能放3个整数,当一个桶中要放的元素超过3个时,则要将新的元素存放在溢出桶中,每个溢出桶也能放3个元素,多个溢出桶使用链表串起来。此Hash表的基桶数目为素数P,Hash表的hash函数对P取模。 其代码定义如下:#define P 7#define NULL_DATA -1struct bucket_node {

2016-05-08 22:26:59 918

原创 SGI STL的rb_tree浅析

rb_tree是一种特殊的二叉搜索树,但是其对平衡的要求比avl_tree低,avl_tree要求左右子树的高度差不能大于1,而rb_tree只要求从一个节点至树的尾端的任何路径的黑节点的个数相等rb_tree必须满足的规则: 1.每个节点不是黑色就是红色; 2.根节点必须为黑色; 3.若节点为红色,则其子节点必须为黑色(红不连); 4.任意节点至树尾端的任何路径的黑色节点的个

2016-05-08 21:28:10 947

原创 SGI STL的序列式容器之vector浅析

vector和array的数据安排和操作方式比较相似, 但是二者又有区别,区别就在于空间运用的灵活性 array是静态空间,配置之后就不能更改,只能重新配置新的空间; vector是动态空间,加入元素时其内部会自行扩充空间区容纳新元素;vector实现技术的关键是其对大小的控制以及重新配置时的数据移动效率vector的数据结构: vector采用的是数据结构是线性连续空间。用两

2016-05-05 10:53:05 724

线程与进程

进线程之间的区别,优缺点,关系等

2016-09-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除