
C/C++
文章平均质量分 61
阳安子
技术在成长。
展开
-
统计整型参数的值为1的二进制位的个数
统计整型参数的值为1的二进制位的个数1、讨论来源: The C programming Language2、代码:#include <stdio.h>#include <stdlib.h>int bitCount(unsigned int n){ int i=0; for(;n;n>>=1) { if(n&1) { ++原创 2016-07-14 20:35:02 · 951 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记1)——线程入门及管理
线程入门、管理线程入门#include #include //1void hello() //2{ std::cout << "Hello Concurrent World\n";}int main(){ std::thread t(hello); //3:新线程的初始函数,启动线程 t.join(); //4:调用线程等待与t相关的线程 system("pause"原创 2016-10-21 19:46:09 · 1029 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记8)——高级线程管理
线程池 线程池:一个预先设定的线程组,会将任务指定给池中的线程。在大多数系统中,将每个任务指定给某个线程是不切实际的,不过可以利用现有的并发性,进行并发执行。线程池就提供了这样的功能,提交到线程池中的任务将并发执行,提交的任务将会挂在任务队列上。队列中的每一个任务都会被池中的工作线程所获取,当任务执行完成后,再回到线程池中获取下一个任务。最简单的线程池 作为最简单的线程池,其拥原创 2016-11-23 23:14:53 · 1026 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记7)——并发代码设计
线程间划分工作的技术 决定使用多少个线程,并且这些线程应该去做什么。还需要决定是使用“全能”的线程去完成所有的任务,还是使用“专业”线程只去完成一件事情,或将两种方法混合。使用并发的时候,需要作出诸多选择来驱动并发,这里的选择会决定代码的性能和清晰度。因此,这里的选择至关重要,所以在你设计应用程序的结构时,再作出适当的决定。在线程处理前对数据进行划分 使用过MPI(Messag原创 2016-11-22 09:07:17 · 1121 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记6)——无锁并发数据结构设计
定义和意义 使用互斥量、条件变量,以及“期望”来同步“阻塞”(blocking)数据的算法和数据结构。使用原子操作的“内存序”特性,并使用这个特性来构建无锁数据结构。 不使用阻塞库的数据结构和算法,被称为“无阻塞”(nonblocking)结构。不过,“无阻塞”的数据结构并非都是无锁的(lock-free)。非阻塞数据结构 使用std::atomic_flag 实原创 2016-11-16 23:22:38 · 1352 阅读 · 1 评论 -
Cpp Concurrency In Action(读书笔记2)——线程间共享数据
前言上一篇:线程入门及管理(点击打开链接)。避免恶性条件竞争原创 2016-10-24 21:42:18 · 939 阅读 · 0 评论 -
Boost库的使用(Windows)
1、Boost库下载进入网页后点击download2、解压、执行脚本如解压到D:\boost_1_60_0,并执行bootstrap.bat文件。点击运行即可,直至控制台自动关闭。3、编译上一步生成b2.exe文件,点击运行既可,直至控制台自动关闭。4、VS2015试用A、添加环境变量添加D:\boost_1_60_0\stage\lib到path原创 2016-10-30 23:21:28 · 644 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记5)——基于锁的并发数据结构设计
为并发设计的意义何在? 在并行程序中的数据结构:要么绝对不变,要么能够正确的同步。要能够正确的同步:一种方法是设计独立的互斥量,来锁住需要保护的数据,另外一种方法就是设计一种能够并发访问的数据结构。 指导思想:设计”线程安全“的数据结构,并减少保护区域,减少序列化操作,提高并发访问的潜力。数据结构并发设计的指导与建议(指南) 一要保证访问是安全的,二要能够真正的并发访问。原创 2016-11-10 12:14:09 · 911 阅读 · 0 评论 -
剑指Offer: 数据流中的中位数;C++容器适配器之priority_queue
数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。维护一个最大堆,一个最小堆,两个堆大小差值小于等于1。class Solution {public: void Insert(int num) { if(big.em原创 2016-08-12 10:05:23 · 1601 阅读 · 0 评论 -
大数的运算实现(C++、字符串)、Git使用示例
前言:国庆前的好未来面试,让我写一个大数的乘法(字符串实现)。我Debug好久,竟然没有写出来。回来在自己电脑上两分钟就写出来了,感觉还是天天找工作,许久没有练手了,生疏了,何况还在Xcode上面。总结:代码必须天天写。类:#pragma once#ifndef _BIGINT_H#define _BIGINT_H#include const int N = 1024;c原创 2016-10-06 16:26:47 · 1031 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记4)——C++内存模型和原子类型操作
内存模型基础基本结构,这个结构奠定了与内存相关的基础并发对象和内存位置每一个变量都是一个对象,包括作为其成员变量的对象。每个对象至少占有一个内存位置。基本类型都有确定的内存位置(无论类型大小如何,即使他们是相邻的,或是数组的一部分)。相邻位域是相同内存中的一部分。对象、内存位置和并发 所有东西都在内存中。为了避免条件竞争,两个线程就需要一原创 2016-11-07 14:47:12 · 1121 阅读 · 0 评论 -
链表的排序(CVTE一面)
来,跟我写个链表排序。将链表排序?对,你有什么要问我的吗?什么类型的值?int。要自己写链表?可以转换成别的容器再写吗?这个O(N)空间,你先尝试写O(1)的。嗯。于是写了2分钟。打扰一下,可以是双链表,还是只能是单链表。你终于问我这个问题了。可以是双链表。写完代码。下面先附上我回来再电脑上写的w后的代码。#include using na原创 2016-09-14 20:14:21 · 580 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记3)——同步并发操作
等待一个事件或其他条件第一,它可以持续的检查共享数据标志(用于做保护工作的互斥量),直到另一线程完成工作时对这个标志进行重设。第二个选择是在等待线程在检查间隙,使用 std::this_thread::sleep_for() 进行周期性的间歇:#include #include #include class wait_test { bool flag; std::原创 2016-10-31 10:52:26 · 2655 阅读 · 0 评论 -
类型转换(C++)
static_cast#include <iostream>using namespace std;class A {public: int a; virtual void fun() { cout << "A:fun()" << endl; }};class B:public A {public: int b; virtu原创 2016-09-03 22:49:01 · 419 阅读 · 0 评论 -
三维数组使用单变量访问,类的大小
#include <iostream>using namespace std;class A {};class B { void fun() { }};int main(){ int three[2][2][3] = { {{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}} }; //三维数组单变量访问,先除再取余。原创 2016-09-02 00:45:40 · 429 阅读 · 0 评论 -
C++容器适配器之Queue
容器适配器之Queue标准库定义了三个容器适配器,使得已有类型得到改造,这里,他们都有默认实现,当然也可以自己传入别的容器类型参数。 根据在Primer中的阅读,做了如下test。 1、pop():队首元素移除,并无返回值,与C++风格一致。 2、front():返回队首元素,不删除。 3、back():返回队尾。 4、size():大小。 5、emplace():构造函数直接调用插入队原创 2016-08-10 17:03:24 · 559 阅读 · 0 评论 -
C语言中FILE相关与CodeBlocks命令行(windows)
C语言中FILE相关 The C programming Language 文件访问#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ FILE *fp; void filecopy(FILE *, FILE *);//声明可以放在调用或全局 if (argc == 1)原创 2016-07-20 21:30:06 · 628 阅读 · 0 评论 -
指针数组与数组指针、数组传入函数后的故事
指针数组与数组指针1、介绍(百度百科): 数组指针是指向数组地址的指针,其本质为指针; 指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。2、代码:#include <stdio.h>int main(){ int *p1[3];//指针数组,本质:数组 int (*p2)[3];//数组指针,本质:原创 2016-07-18 11:47:39 · 823 阅读 · 0 评论 -
Cpp Concurrency In Action(读书笔记9)——多线程程序的测试和调试
与并发相关的错误类型 测试和调试就像一个硬币的两面——测试是为了找到代码中可能存在的错误,需要调试来修复错误。如果在开发阶段发现了某个错误,而非发布后发现,这将会将使错误的破坏力降低好几个数量级。 错误类型:不必要阻塞条件竞争不必要阻塞 通常,是因为其他线程在等待该阻塞线程上的某些操作完成,如果该线程阻塞了,那那些线程必然会被阻塞。死锁,常考读书笔记2给出的指导意原创 2016-11-24 10:50:05 · 810 阅读 · 0 评论