- 博客(20)
- 资源 (138)
- 收藏
- 关注
原创 C++并发实战1:thread object
boost::thread的使用首先确定安装了boost,ubuntu采用:sudo apt-get install libboost-dev再安装:sudo apt-get install libboost-thread编写如下文件:#include#include#include#includeusing namespace std;void show(){
2013-11-29 18:15:15 10576 9
原创 Boost::lambda
google了很久终于找到一篇我能读懂的lambda文章了,见传送门:http://club.topsage.com/thread-2276569-1-1.html例:采用lambda编写一个找出字符串中大写字母的程序#include#include#include#include#include#includeusing namespace std;using namesp
2013-11-29 17:41:06 1568
原创 Rhadoop实战:协同过滤
具体的数据和算法见:http://blog.fens.me/rhadoop-mapreduce-rmr/这里仅给出Rhadoop代码的部分注释:#加载rmr2包library(rmr2)#输入数据文件train<-read.csv(file="small.csv",header=FALSE)names(train)<-c("user","item","pref")#使用rmr
2013-11-28 17:50:49 1692
原创 R笔记
length(x)针对向量返回长度,针对列表或者数据框返回维数dim(x)//显示x的维度str(x)//显示x的结构class(x)//x的对象类型mode(x)//对象模式names(x)//对象中各成分的名称head(x)//显示x的开始部分tail(x)//显示x的最后部分edit(x)/fix(x)//编辑xoptions()//全局选项设定,如opt
2013-11-28 15:29:23 10949
原创 Rhadoop实战:统计邮箱域名出现次数
数据源(部分),完整数据见:http://blog.fens.me/rhadoop-demo-email/wolys@21cn.comzss1984@126.com294522652@qq.comsimulateboy@163.comzhoushigang_123@163.comsirenxing424@126.comlixinyu23@qq.comchenlei1
2013-11-28 13:57:25 2262
原创 Acceptor+TcpConnection+TcpServer
Acceptor负责accpet一个TCP客户连接并执行相应的回调通知连接的使用者 TcpConnection是指一个TCP连接,执行相应的连接回调 TcpServer管理所有的TCP连接#include#include#include#include#include#include#include#include#include#include"Accept
2013-11-26 22:59:23 1152
原创 Boost字符串分割split
boost中的split分割函数使用:#include#include#include#include#include#includeusing namespace std;using namespace boost;int main(){ ifstream in("1125.txt",ios::in); string s; getline(in,s);
2013-11-25 16:06:12 2727
原创 Rcpp实战
Rcpp比传统的R API简洁易用,更加类似C++了。Rcpp采用的Robject管理R传来的对象,如: cpp::NumericVector ab = Rcpp::NumericVector::create(123.45, 67.89);创建一个2个值的数值型向量,可以直接用下标操作[]取到元素值。 template SEXP wrap(const T& object);
2013-11-25 14:26:46 6794
原创 带有TimerQueue的EventLoop
muduo的事件循环EventLoop可以完成:指定描述符上的事件监听及处理,指定时间的回调处理,用户向EventLoop发送任务并让其执行任务回调。 几个关键的类如下: Poller:就是select/poll/epoll等IO复用功能的封装,用于监听指定事件集合的注册事件,并返回就绪的事件集合 Channel:每一个Channel负责一个文件描述
2013-11-23 21:42:13 1712
原创 Rcpp实现R与C++的无缝连接
首先在R里面安装包Rcpp:install.packages('Rcpp') 然后编写自己的c++文件,假设在Rstudio里面编写c/c++ script 如下:一个简单的循环输出循环变量程序#include //必须的头文件using namespace Rcpp;// [[Rcpp::export]]void gibbs(int N, int thin) {
2013-11-22 11:26:03 6180
原创 muduo简化(1):Reactor的关键结构
说明:本文参照muduo代码,主要用意是简化muduo代码呈现其主要结构,并脱离muduo的文件依赖。 本节简化的是Reactor的关键结构部分:EventLoop、Poller、Channel。遵照one loop per thread原则,一个事件循环对应一个IO线程,IO线程运行EventLoop事件主循环,该主循环loop调用IO复用器Poller监听事件集合,并将就
2013-11-17 21:17:24 2302
原创 Big Three+noncopyable
三法则的要求在于,假如类型有明显地定义下列其中一个成员函数,那么程序员必须连其他二个成员函数也一同编写至类型内,亦即下列三个成员函数缺一不可。 [1]: 析构函数(Destructor) 复制构造函数(copy constructor) 复制赋值运算符(copy assignment operator) 无论何时你需要定义析构函
2013-11-16 10:24:53 1213
原创 Thread系列的RAII封装
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include"Mutex.hpp"using namespace std;using namespace boost;/
2013-11-15 00:16:26 3113
原创 Ubuntu安装Google Protocol Buffer
下载安装步骤,需要自行下载包并安装 ./configure make make check make install编译proto文件时出现以下错误:
2013-11-10 15:36:26 10236
原创 fork与多线程
如果一个多线程程序调用了fork,那么新创建的子进程只拥有一个执行线程(调用fork的那个线程的完整复制),并且子进程自动继承父进程的互斥锁(条件变量)的状态,即父进程中被加锁的互斥量在子进程中也是被锁住的。于是子进程不知道继承而来的互斥量的具体状态,若互斥量在fork前已经被加锁,子进程若再对互斥量加锁则一定死锁。当然若fork后的子进程立即调用exec()执行其它程序隔断了父子关系则不会出现上
2013-11-03 21:10:54 2515
原创 RAII封装TCP连接
文件描述符的分配方式:使用当前最小可用的文件描述符。在多线程环境中文件描述符容易出错:若一个线程A持有一个描述符fd,另一个线程B在close(fd)后立即open一个描述符刚好值等于前面的fd,那么线程A拿着fd读写是要出错的,线程不能感知描述符的死活。采用RAII手法封装描述符,对象析构时关闭描述符,只要对象还活着就不会有其它对象和它有一样的描述符。 给出一个简单粗糙的例子:服务端主
2013-11-03 17:07:26 2046
原创 线程私有数据TSD
在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由Posix线程库维护,称为线程
2013-11-03 10:50:21 2163
原创 __thread关键字
__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。 __thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内容可
2013-11-03 09:04:29 27107 1
原创 exit:c++非线程安全
exit调用会终止整个进程,在_exit的基础上执行一系列用户空间操作比如刷新缓冲区。_exit是直接交给内核,exit先执行清除操作再交给内核。exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。 因此exit在C++中非线程安全,看下面这个例子:#include#include#include#includeu
2013-11-02 21:48:58 2567
原创 有限容量BlockingQueue:消费者生产者
有限容量的BlockingQueue实现工作队列,用于生产者消费者问题。#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;using namespace boost;
2013-11-02 12:54:41 2183
一个最容易懂的 LaTeX 入门教材.pdf
2013-08-13
ggplot2 -- Elegant Graphics for Data Analysis.PDF
2013-07-13
MySQL技术内幕Innodb存储引擎.xmind
2020-07-11
Desinging Data-Intensive Applications-2.xmind
2020-07-11
Desinging Data-Intensive Applications.xmind
2020-07-11
Machine Learning-A Probabilistic Perspective.pdf
2013-09-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人