摘要:
今天突然想看一下linux下的多线程编程,对于多线程编程也有自己的理解,比如多个线程共享所在进程的所有资源,当然对这些资源的访问,有些时候需要我们互斥访问,所以得有线程锁,有时候可能我们需要线程间同步,那么就需要我们使用条件变量和信号量等等,多个线程每个线程都有一个线程栈,用来保存每个线程独有的状态转换,当然这些线程栈都是在进程的地址空间内,只不过他们的地址相互独立而已,当然如果我们能知道其他线程的地址,我们也可以非法去访问其他线程的内部变量。首先我想先介绍关于pthread线程库的一些东西:头文件:#include <pthread.h>函数原形:int pthread_crea 阅读全文
摘要:
对于多线程编程,我们有时候会遇到多个线程需要互斥访问同一个资源的问题,或者是线程间同步的问题,比如生存者和消费者,下面我就来讲讲多线程编程中的同步和互斥的问题。1:互斥锁当有一个链表,这个链表需要两个线程互斥访问时,我们就需要互斥锁。为什么呢?因为当一个线程要去使用这个链表时,首先他得先获得锁,一旦发现锁已经被别的线程占用,则无法获得锁将阻塞等待互斥锁被别人解锁,当然也有办法不阻塞,一旦无法获得锁,则直接返回。如何初始化锁:函数原型: int pthread_mutex_init (pthread_mutex_t*mutex,constpthread_mutexattr_t* mutexatt 阅读全文
摘要:
方法一:最笨的方法,遍历链表1,每遍历一个节点,判断这个节点是否在链表2中for node1 in l1 for node2 in l2 if node1 == node2 return True时间复杂度比较高,O(l1.length*l2.length)方法二:万能的hash,对于节点地址进行hash到不同的桶中,首先将l1的所有节点的地址hash到不同的桶中,然后对l2的每个节点,将它的节点地址hash到不同的桶中,一旦发现两个节点hash到相同的桶中,说明节点地址有相同,则相交。时间复杂度:O(l1.length+l2.length)方案三:如果两个链表中的相交,必然... 阅读全文
摘要:
关于反斜杠:\ 和c++上差不多,都是继续上一行关于赋值:多元赋值,x,y,z=1,2,'hello world'///x = 1, y = 2, z = 'hello world'关于交换:x=1,y=2x,y = y,x/// y=1,x=2python一个简单的模板:#!/usr/bin/env python"this is a class module"import sysdebug = Trueclass Test: "Test class" passdef test(): "test function 阅读全文
摘要:
前些日子,写过一个普通的智能指针,模拟的是boost中的auto_ptr,今天又写了一个关于boost中的share_ptr,引用计数器智能指针,感觉还行,功能基本实现,设计思想基本上是这么一回事,智能指针类管理资源,引用计数器类管理是否有多个智能指针指向同一个资源,如果有为这个资源设一个引用计数器,计数器值表示有多少个智能指针在使用这个资源,一旦有一个智能指针准备释放这个资源,仅仅对计数器减一,只有当没有智能指针指向这个资源,才真正的释放资源,当然你也可以强制让所有的智能指针释放这个资源,直接delete掉资源,然后将所有的智能指针delete掉。下面是我代码:#include <io 阅读全文
摘要:
身为一个程序员,我个人很喜欢早洗澡的时候去思考一些技术上的东西,今天有人问我什么是面向对象,其实我也不是很懂,我以前一直认为面向对象就是继承,而继承就是虚函数,但是我洗澡的时候在思考,真的是这样子的吗?错了,不管虚函数的机制是为了继承和多态而服务,而继承和多态确实为了OO的思想而服务,怎么说呢?我们都知道,当我们都知道学生A,B,C,D.....,都是学生,并且他们有一些共同的属性,比如年龄,性别,学号。。。,如果在面向过程的编程模式中,我们可能要为每一个学生建立一个存放他/她属性的一个东西,而面向对象呢,我们只要将他们共同的东西抽象出来形成一个类,而类中只有他的属性,那么我们只要使用这个类去 阅读全文
摘要:
关于help:python中 help(raw_input)结果如下:Help on built-in function raw_input in module __builtin__:raw_input(...) raw_input([prompt]) -> string Read a string from standard input. The trailing newline is stripped. If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError. O... 阅读全文
摘要:
最近遇到vmware好多问题,比如无法从windows下copy到虚拟机内,还有启动的时候出现各种问题,包括startx进不了X windows,一直没找到问题,今天重新装了vmware tools之后,所有问题迎刃而解。 阅读全文
摘要:
今天收到盛大的面试,问我一个问题,关于派生类中如何初始化基类对象,我在想派生类对于构造函数不都是先构造基类对象,然后在构造子类对象,但是如果我们在成员初始化列表先初始化派生类的私有成员,在函数内去调用基类的构造函数,能编译通过吗?或者当我们定义了基类的默认构造函数,而没有去在派生类的构造函数中显示的去调用基类的构造函数,会出现什么状况,我想派生类肯定会自动去调用基类的默认构造函数,那么析构函数又怎么样呢?我们都知道派生类的析构函数会先被调用,然后基类的析构函数后被调用,但是我不知道我们是否需要在派生类的析构函数中显示的去调用基类的析构函数吗?这个有待我去验证。代码一:在派生类中成员初始化列表先 阅读全文
摘要:
最近每天都在学习技术,现在我有一些自己的想法,以前总是想什么都学,突然发现什么都学,结果就是什么都学不好,如果只在一段时间内研究一个东西,但是东西不要太大,比如我最近在研究内存的东西,我只看程序内存这一块的东西,我发现我能学到很多的东西,现在我准备开始入手函数式编程,时间定了三个星期,哈哈希望能在这三个星期内学习到很多的东西。 阅读全文