线程
文章平均质量分 65
dwx2046
这个作者很懒,什么都没留下…
展开
-
Linux进程与线程的区别
原文:http://my.oschina.net/cnyinlinux/blog/422207Linux进程与线程的区别cnyinlinux本文较长,耐心阅读,必有收获!进程与线程的区别,早已经成为了经典问题。自线程概念诞生起,关于这个问题的讨论就没有停止过。无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了。一般程序员而言,搞清楚二者的转载 2016-03-16 09:41:28 · 494 阅读 · 0 评论 -
竞态条件与临界区
在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。多线程同时执行下面的代码可能会出错:1public c转载 2016-04-05 20:57:40 · 342 阅读 · 0 评论 -
notify()和notifyAll()的区别
当你Google”notify()和notifyAll()的区别”时,会有大片的结果弹出来,(这里先把jdk的javadoc文档那一段撇开不说),所有这些搜索结果归结为等待的线程被唤醒的数量:notify()是唤醒一个, 而notifyall()是唤醒全部.那他们的真正区别是什么呢?让我们来看看个生产者/消费者的案例(假设生产者/消费者这个类中有两个方法put和get),它是有问题的(因为转载 2016-05-14 11:09:09 · 891 阅读 · 0 评论 -
进程间、线程间通信方式小结
https://hackpad.com/vUn4TbzLTCj#:h=操作系统之前一直对进程间一、进程间的通信方式# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。原创 2016-04-14 09:14:08 · 432 阅读 · 0 评论 -
使用RAII来管理对象资源
RAII(资源获取即初始化)基本技术原理很简单,如果希望保持对某个重要资源的跟踪,那么创建一个对象,并将资源的生命期和对象的生命期相关联。这样的话,就可以利用c++复杂老练的对象管理机制来管理资源。最简单的形式是,当你构造一个对象的时候,其构造对象会获得一份资源,而析构函数则释放这份资源。采用对象管理资源,即使碰到意外的return、异常(C++保证如果抛出了异常,局部对象就会被销毁)甚至是邪恶的原创 2016-06-09 22:41:23 · 1200 阅读 · 0 评论 -
正确使用POSIX条件变量
最近在写线程池的时候看到了对于pthread_cond_t条件变量这样的解释:pthread_cond_wait() blocks the calling thread until the specified condition is signalled. This routine should be called while mutex is locked, and it will原创 2016-06-10 16:43:53 · 1065 阅读 · 0 评论 -
条件变量的虚假唤醒
这个问题主要来源与我们在使用pthread条件变量wait函数的时候总是使用while去做判断而不是使用if,因为等待在条件变量上的线程被唤醒有可能不是因为条件满足而是由于虚假唤醒(Spurious wakeups)That's called spurious wakeup and is explicitly allowed by POSIX. Essentially, return fr原创 2016-06-10 17:38:05 · 1995 阅读 · 0 评论 -
C++内存模型
关于乱序说到内存模型,首先需要明确一个普遍存在,但却未必人人都注意到的事实:程序通常并不是总按着照源码中的顺序一一执行,此谓之乱序,乱序产生的原因可能有好几种:编译器出于优化的目的,在编译阶段将源码的顺序进行交换。程序执行期间,指令流水被 cpu 乱序执行。inherent cache 的分层及刷新策略使得有时候某些写读操作的从效果上看,顺序被重排。以上乱序现象虽然来源不同原创 2016-07-07 11:11:35 · 1106 阅读 · 0 评论 -
Linux 互斥锁、原子操作实现原理
在Linux下,信号量和线程互斥锁的实现都是通过futex系统调用。futex(快速用户区互斥的简称)是一个在Linux上实现锁定和构建高级抽象锁如信号量和POSIX互斥的基本工具。它们第一次出现在内核开发的2.5.7版;其语义在2.5.40固定下来,然后在2.6.x系列稳定版内核中出现。Futex 是fast userspace mutex的缩写,意思是快速用户空间互斥体。Lin原创 2016-08-24 22:13:37 · 10068 阅读 · 0 评论