今天查看hadoop源代码, 发现有个Unsafe.java稍微总结下优势 1 减少线程调度开销, Unsafe.java 通过采用非堵塞原子方式来减少线程调度开销 2 传统线程通信通过wait,notify方法实现(会有信号量的堵塞队列),而Unsafe使用操作系统调度命令park,unpark,...
分类:
编程语言 时间:
2014-07-16 20:37:03
阅读次数:
273
一、进程进程可以认为是程序执行时的一个实例.进程是系统进行资源分配的独立的实体,且每个进程拥有独立的地址空间.一个进程无法直接访问另一个进程的变量和数据结构,如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,有名管道,信号,信号量,消息队列,套接字等.一个进程可以拥有多个线程,...
分类:
编程语言 时间:
2014-07-15 23:39:05
阅读次数:
334
阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步相互排斥量Mutex》前面介绍了关键段CS、事件Event、相互排斥量Mutex在经典线程同步问题中的使用...
分类:
编程语言 时间:
2014-07-15 08:39:59
阅读次数:
276
正在拜读《windows核心编程》,稍后总结。---------XiaoF先说说为何要实现此功能 1,利用文件映射对象,可以在同一电脑的不同进程之间共享数据块。 2,借助邮件槽和命名管道,在网络中的不同计算机上运行的进程相互发送消息。 3,互斥量。信号量。事件,允许不同进程中的线程做同步。如何实现,...
分类:
其他好文 时间:
2014-07-14 23:31:16
阅读次数:
285
首先大家要了解 dispatch_queue 的运作机制及线程同步
我们可以将许多 blocks 用 dispatch_async 函数提交到 dispatch_queue ,如果类型是DISPATCH_QUEUE_SERIAL (串行),那么这些 block 是按照 FIFO (先入先出)的规则调度的,也就是说,先加入的先执行,后加入的一定后执行,但在如果类型是DISPATCH_QUEUE_C...
分类:
编程语言 时间:
2014-07-13 16:56:40
阅读次数:
268
DOWN操作:linux内核中,对信号量的DOWN操作有如下几种:
void down(struct semaphore *sem); //不可中断
int down_interruptible(struct semaphore *sem);//可中断
int down_killable(struct semaphore *sem);//睡眠的进程可以因为受到致命信号而被唤醒,中断获取信号量...
分类:
其他好文 时间:
2014-07-13 16:21:36
阅读次数:
501
众所周知,windows平台上实现线程同步,或者说资源的加锁与解锁的方法有内核事件、临界区、互斥量、信号量,甚至interlocked系列函数等多种手段。但是在日常的编程中,我们使用这些手段对 “多个线程同时对同一个资源进行读写”
的时候,在读写之前先要对资源假锁,读写完之后要对资源解锁。
设想这样一种情况,有一个ftp服务器,每天有很频繁的对这个ftp服务的文件进行下载,但是几乎好几天才会对...
直接上代码:#include //必要的头文件,使用Windows API函数
#include
int index = 0;
int tickets = 100;//票数
HANDLE hMutex; //使用全局的互斥对象来保证对同一资源的互斥访问与操作这里是tickets
//线程处理函数原型,形式可从MSDN中拷贝
//线程1 的入口函数
DWORD WINAPI Fun1Proc...
分类:
编程语言 时间:
2014-07-08 17:12:03
阅读次数:
239
Freertos是一个硬实时内核,支持众多的微处理器架构,我们可以从它的官网(www.freertos.ort)下载它的sourcecode,同时也可以看出它支持了几十种的微处理器架构,这些就不罗嗦了。之所以选择研究这个,是应为窥探RTOS内核的内幕一直每一个做底层软件开发人员的心愿,选择过好几种RTOS但他们有的是需要收费,有的不太成熟也不够系统,有的虽然比较成熟但是系统太大不太适合研究。而fr...
分类:
其他好文 时间:
2014-07-08 14:17:54
阅读次数:
249
线程之间的关系一般有两种,一种是互斥,一种是同步,互斥可以表现为两个线程同时争夺同一个资源,同步可以表现为两个线程按一定次序完成一个任务(如A 完成任务的前半部分,紧接着需要线程B 完成线程的后半部分)
在C++中处理上面两种关系的常用方法是:
关键段、事件、互斥量、信号量。
注意C++开启新的线程一定使用_beginthreadex函数而不要使用CreateThread函数...
分类:
编程语言 时间:
2014-07-05 23:27:02
阅读次数:
224